گزارش برگزاری اولین دوره آموزش Domain-Driven Design

هم‌راستا با اهداف انجمن DDD ایران و با توجه به اهمیت روزافزون برگزاری یک دوره آموزش اصولی، کاربردی و به‌روز برای پاسخ به نیازِ علاقه‌مندان به یادگیری رویکرد DDD، نخستین دوره آموزش DDD در دی و بهمن ماه ۱۴۰۰ با حضور ۳۰ شرکت‌کننده (دو گروه) به صورت حضوری و با حمایت شرکت خدمات گردشگری علی‌بابا برگزار گردید.

مهمترین سرفصل‌های این دوره که توسط «روح‌الله دلپاک» به عنوان مربی این دوره، برای شرکت‌کنندگان تشریح شد، به شرح زیر است:

  • ویژگی سیستم‌های پیچیده چیست؟ در توسعه نرم‌افزار با چه انواعی از پیچیدگی مواجهیم؟
  • تعریف درست از DDD چیست؟ این رویکرد چه مساله‌ای را در مرکز توجه خود قرار داده و چرا تا به این درجه مورد اقبال طراحان سیستم‌های پیچیده سازمانی قرار گرفته است؟
  • ضرورت توجه به ابعاد راهبردی طراحی (Strategic)
  • تکنیک‌های تحلیل فضای کسب و کار
  • شیوه تقسیم فضای دومین به زیرمجموعه‌های کارکردی
  • چگونه به کشف و شناخت فضای مساله بپردازیم؟
  • مدیریت پیچیدگی دومین و ایده B.C
  • چالش‌های تکثیر پیچیدگی ناشی از فقدان زبان فراگیر و راه غلبه بر آنها
  • مدل چیست و چرا به یک مدل از فضای مساله نیاز داریم؟
  • الگوهای متداول در تعامل بین B.C ها و نقش Context Map در تشخیص عارضه‌های ارتباطی بین تیم‌ها.
  • الگوهای پیاده‌سازی منطق تجاری، تفاوت‌ آنها و روش یافتن الگوی مناسب به فراخور دامین.
  • اجزای سازنده‌ی مدل و شرح جامع Tactical Design
  • بررسی نکته‌ها و پیشنهادات Eric Evans ذیل عنوان Supple Design
  • آشنایی با تکنیک Event Storming و تجربه عملی آن
  • آشنایی با معماری‌های ‌سازگار با رویکرد DDD و بررسی تفاوت‌های آنها مانند Ports & Adapters, CQRS,
  • الگوهای ترجمه پیام و ارتباط بین سرویس‌ها نظیر Saga, Outbox Pattern, Process Manager
  • مروری بر معماری مایکروسرویس و ارتباط مفاهیم مطرح در DDD با این معماری
  • آشنایی با برخی از رهیافت‌های طراحی (Design Heuristics) و کاربرد آنها در تصمیمات طراحی

شرکت کنندگان این دوره علاوه بر آشنایی با موضوعات فوق با شرکت در یک فوق برنامه کتاب‌خوانی، هر هفته در برنامه هم‌خوانی کتاب «مهارت‌های نرم – راهنمای زندگی تولید کنندگان نرم‌افزار» نیز شرکت داشتند که این روند پس از پایان دوره هم ادامه پیدا کرده است.

در پایان از همه شرکت‌کنندگان این دوره که در شکل‌گیری یک کار نیک نقش داشتند صمیمانه تشکر می‌کنیم. طبق قرار قبلی، تصمیم بر آن بود که ‌کلیه عواید این دوره (شهریه پس از کسر هزینه‌های اجرایی)، بر اساس انتخاب شرکت کنندگان به مرکز خیریه فعال در حوزه آموزش کودکان یا حمایت از کاشت نهال در مراتع طبیعی اختصاص داده ‌شود. به این ترتیب کل مبلغ قابل کمک به خیریه 282,859,889 ریال و مبلغ قابل کمک به کاشت نهال 133,110,536 ریال جمع‌آوری گردیده که به زودی به حساب مراکز مربوطه واریز خواهد شد.

شروع ثبت‌نام دوره آموزش کاربردی Domain-Driven Design

انجمن DDD ایران نخستین دوره آموزش کاربردی Domain-Driven Design را برگزار می‌کند. طول این دوره ۲۰ ساعت است.

شرکت‌کنندگان در این دوره با علل پیدایش این رویکرد و مبانی فکری آن، الگوهای مدل‌سازی منطق کسب و کار، الگوهای معماری سازگار با DDD و تکنیک‌های متداول در شناخت فضای مساله در فضایی تعاملی و حین کار گروهی آشنا خواهند شد. پس از هر جلسه، تمرین‌هایی برای شرکت‌کنندگان تعریف می‌شود و مربی و دستیار وی در تمام مدت پاسخگوی سوالات شرکت‌کنندگان خواهند بود.

همچنین شرکت‌کنندگان این دوره در صورت تمایل می‌توانند در یک دوره آنلاین کتاب‌خوانی گروهی شرکت کنند. نام کتاب و جزییات مربوط به آن بعدا اعلام می‌شود.

در پایان دوره انتظار می‌رود که شرکت کننده:

🔅با مفاهیم، الگوها و چالش‌های طراحی استراتژیک آشنا شود و به درک عمیقی از اهمیت زبان در رسیدن به فهم مشترک و توسعه یک مدل کارآمد دست پیدا کند.

🔅بتواند با درک بهتر از رویکرد DDD، پیچیدگی فضای مساله را به نحوی به بخش‌های مجزا تفکیک کند که فهم نیازمندی و توسعه محصول آسان‌تر و خلق ارزش برای ذینفعان هموارتر شود.

🔅به تکنیک‌های مدل‌سازی منطق‌ کسب و کار که در رویکرد DDD  مطرح است، مسلط شود و بتواند در عمل آنها را به کار بگیرد و مدل‌های غنی‌تری طراحی کند.

🔅با گروهی از الگوهای معماری که می‌توانند با رویکرد DDD سازگاری خوبی داشته باشند آشنا شود و بتواند ارتباط بین DDD و معماری‌هایی نظیر Layered Architecture, CQRS, Ports & Adapters را کاملا درک کند.

🔅 با معماری سیستم‌های توزیع شده نظیر مایکروسرویس و Event-Driven آشنایی اجمالی پیدا کند و درک کند که این دو معماری از رویکرد DDD چگونه تاثیر گرفته‌اند و در نهایت تصویر جامعی از ارتباط این معماری‌ها و رویکرد DDD به دست بیاورد.

🔅 با رهیافت‌‌ها و تفکر طراحی تکاملی آشنا شود و یکی از محبوب‌ترین تکنیک‌های تجزیه و تحلیل فضای مساله یعنی Event Storming را عملا تجربه کند.

مخاطبین: 
کلیه توسعه‌دهندگان نرم‌افزار که در توسعه سیستم‌های پیچیده با مشکل روبرو هستند و به دنبال پاسخی برای این سوال هستند که چگونه می‌توان محصولی دوست داشتنی از نظر مشتریان و توسعه‌پذیر از نظر توسعه‌دهندگان ساخت؟

محل برگزاری: تهران – کارخانه نوآوری آزادی

▪️کسب اطلاعات بیشتر و ثبت‌نام:
https://evand.com/events/dddiran-domain-driven-design-course

انجمن DDD ایران

اطلاعیه پیش‌ثبت‌نام دوره آموزش Domain-Driven Design

به منظور برنامه‌ریزی برای تدارک فضا و زیرساخت لازم برای برگزاری یک دوره آموزش Domain-Driven Design نیاز داریم تا تخمینی از تعداد علاقه‌مندان شرکت در دوره به دست بیاوریم. لذا اگر مایلید که در دوره‌ای با مشخصات زیر شرکت کنید، می‌توانید با انجام پیش ثبت‌نام، ضمن برخورداری از اولویت شرکت در دوره، به ما در تدارک و برنامه‌ریزی بهتر کمک کنید.

مشخصات دوره:
مربی: روح‌الله دلپاک
نوع دوره: حضوری – چالش محور
محل برگزاری: تهران
برنامه برگزاری: پنج‌شنبه یا جمعه هر هفته به مدت ۴ هفته پی در پی (روزانه پنج ساعت)
مدت: ۲۰ ساعت

در پایان دوره انتظار می‌رود که شرکت کننده:

🔅با مفاهیم، الگوها و چالش‌های طراحی استراتژیک آشنا شود و به درک عمیقی از اهمیت زبان در رسیدن به فهم مشترک و توسعه یک مدل کارآمد دست پیدا کند.

🔅بتواند با درک بهتر از رویکرد DDD، پیچیدگی فضای مساله را به نحوی به بخش‌های مجزا تفکیک کند که فهم نیازمندی و توسعه محصول آسان‌تر و خلق ارزش برای ذینفعان هموارتر شود.

🔅به تکنیک‌های مدل‌سازی منطق‌ کسب و کار که در رویکرد DDD مطرح است، مسلط شود و بتواند در عمل آنها را به کار بگیرد و مدل‌های غنی‌تری طراحی کند.

🔅با گروهی از الگوهای معماری که می‌توانند با رویکرد DDD سازگاری خوبی داشته باشند آشنا شود و بتواند ارتباط بین DDD و معماری‌هایی نظیر Layered Architecture, CQRS, Ports & Adapters را کاملا درک کند.

🔅 با معماری سیستم‌های توزیع شده نظیر مایکروسرویس و Event-Driven آشنایی اجمالی پیدا کند و درک کند که این دو معماری از رویکرد DDD چگونه تاثیر گرفته‌اند و در نهایت تصویر جامعی از ارتباط این معماری‌ها و رویکرد DDD به دست بیاورد.

🔅 با رهیافت‌‌ها و تفکر طراحی تکاملی آشنا شود و یکی از محبوب‌ترین تکنیک‌های تجزیه و تحلیل فضای مساله یعنی Event Storming را تجربه کند.

مخاطبین:
کلیه توسعه‌دهندگان نرم‌افزار که درگیر توسعه سیستم‌های پیچیده هستند و دغدغه‌ی خلق محصول با کیفیت را دارند.

شهریه:
دو میلیون تومان (تمام عواید این دوره به مرکز خیریه فعال در حوزه کودکان اهدا می‌شود.)

لینک پیش ثبت‌نام:
https://docs.google.com/forms/d/e/1FAIpQLScduNqt7_cUcDIA4YWl2-ac9qIHvQ4NayH5SfEfDDYvPjTM8Q/viewform

اطلاعیه برگزاری وبینار TDD

رویکرد Test-Driven Development شیوه‌ای از توسعه نرم‌افزار است که به توسعه‌دهندگان پیشنهاد می‌کند که قبل از شروع کد نویسی برای فیچر جدید، انتظار خودشان از عملکرد آن فیچر را به صورت تست‌های خودکار بنویسند و سپس شروع کنند به نوشتن کد تا جایی که نتیجه تست‌ها موفق شود.

در این وبینار، همین ایده کلیدی TDD در عمل نمایش داده می‌شود تا مخاطب درک کند که این ایده چطور می‌تواند اجرا شود و نتیجه‌ی اجرای آن چه تاثیری بر سادگی طراحی‌های ما خواهد گذاشت.

برای همین منظور، می‌رویم سراغ اعداد رومی و سعی می‌کنیم برنامه‌ای بنویسیم که اعداد انگلیسی را به معادل رومی آن تبدیل کرده و نمایش دهد.

ارائه‌دهندگان این وبینار، مساله نمایش اعداد رومی را در قالب اجرای کد کاتا (Code Kata) پیش خواهند برد و با حفظ اصول TDD مساله را حل خواهند کرد.
علاوه بر این، در این ارائه شما می‌توانید نظاره‌گر این باشید که دو نفر چطور می‌توانند Pair Programming انجام دهند.

تاریخ: ۱۶ اردیبهشت ۱۴۰۰ | ساعت ۱۶ الی ۱۸
این وبینار رایگان است.
لینک ثبت‌نام: https://evand.com/events/tdd-for-beginners

اهمیت طراحی ماژولار در رویکرد DDD

به نظر می‌رسد که مفهوم Module به نسبت دیگر مفاهیم مطرح در رویکرد Domain-Driven Design کمتر مورد توجه طراحان و توسعه‌دهندگان قرار می‌گیرد.

مشاهدات شما چیست؟ آیا اهمیت مفهوم Module و طراحی Modular آن‌طور که باید و شاید در تیم‌‌هایی که با آنها کار کرده‌اید درک و رعایت شده است؟
به نظر شما چرا مفهوم Module زیر سایه مفاهیم دیگری مثل Aggregate, Value Object, Domain Service و … کمرنگ‌تر شده است؟ و کمرنگ شدن این مفهوم چه آسیبی به غنای مدل وارد می‌کند؟

برای بحث و گفتگو در این باره می‌توانید به گروه انجمن DDD ایران وارد شوید. به این نشانی:

https://t.me/ddd_iran_discussion

وبینار بکارگیری اصول Functional Programming در توسعه با رویکرد Domain-Driven Design

چگونه دو پارادایم Functional Programming و Domain-Driven Design می‌توانند دست در دست هم به ایجاد یک مدل منعطف و غنی کمک کنند؟

چگونه می‌توانیم از مفاهیم بنیادی مطرح در Functional Programming مانند داده‌های جبری، ترکیب‌پذیری (Composition) و توابع خالص (Pure Functions) برای پیاده‌سازی قواعد دامین استفاده کنیم؟

چگونه می‌توانیم ضمن رعایت اصل تغییرناپذیری داده‌ها (Immutability) که به عنوان یک اصل بنیادی در دنیای FP مطرح است، از تکنیک‌های طراحی مطرح در DDD استفاده کنیم؟

سام داورنیا در ارایه‌ای جذاب و کاربردی، به این سوالات پاسخ خواهد داد. سام تجربه‌ای طولانی در کار با سیستم‌های توزیع شده دارد و به مفاهیم Functional Programming مسلط است. او سابقه همکاری با چندین شرکت آمریکایی را دارد که رویکرد DDD و معماری CQRS را برای توسعه محصولات خود برگزیده‌اند.

زمان: پنج‌شنبه ۲۳ بهمن ۱۳۹۹ – ساعت ۱۸ به وقت تهران
شرکت در این وبینار رایگان است.
ثبت‌نام:
https://evand.com/events/functional-programming-in-ddd

شروع فعالیت گروه پرسش و پاسخ انجمن DDD ایران

به این وسیله به اطلاع شما عزیزان می‌رسانیم که به منظور ایجاد بستری برای گفتگو، پرسش و پاسخ و امکان مشارکت‌ اعضا در پیش‌برد اهداف انجمن DDD ایران، یک گروه تلگرام ایجاد شده است.

با عضویت در این گروه می‌توانید با دیگران علاقه‌مندان به مباحث طراحی و مدل‌سازی دامین ارتباط بگیرید و تجارب خود را با هم به اشتراک بگذارید.

لینک ورود:
https://t.me/ddd_iran_discussion

  • انجمن DDD ایران

اطلاعیه برگزاری کارگاه آموزشی: «چگونه با ریفکتور ساندویچی کد خود را لذیذتر کنیم؟»

سر و کله زدن با کدهای در هم تنیده و تو در تو، با خوانایی پایین و بدون تست یکی از مشکلات روزانه‌ی تعداد زیادی از توسعه‌دهندگان نرم‌افزار است. از سوی دیگر، کمبود وقت و فشارهای بازار باعث می‌شود تا محصول، نقص و ایرادات مشهودی داشته باشد.
در این وبینار، سپهر نامدار به همراه هادی احمدی، برای شما توضیح خواهند داد که چگونه می‌شود با رعایت چند الگوی ساده، یک کد شلخته و بدون تست را تمیزتر کرد و برای آن تست‌های خودکار نوشت.

مدرسان: سپهر نامدار و هادی احمدی

تاریخ: جمعه دهم بهمن – ساعت ۱۶:۳۰ الی ۱۸:۳۰

🔺ظرفیت شرکت در این کارگاه محدود و تنها ۲۴ نفر است.

جهت کسب اطلاعات بیشتر و ثبت‌نام، مراجعه کنید به:

https://evand.com/events/refactoring-with-the-sandwich-pattern-413138

کارگاه آموزشی با عنوان: Testing Invariants with Property-Based Testing

اولین قدم در توسعه Domain Model بعد از شناخت مساله، تقسیم مساله به بخش‌های کوچک و توسعه این بخش‌های کوچک به شکل Iterative و Incremental می‌باشد. TDD تکنیکی است که بسیاری از برنامه‌نویسان برای این منظور استفاده می‌کنند. اما عمده برنامه‌نویسان برای نوشتن تست‌های خود از رویکرد Example-Based (مثال-محور) استفاده می کنند و روش‌های دیگر را در نظر نمی‌گیرند.

می‌توان گفت Property-Based Testing ما را ملزم می‌سازد تا در مورد تست‌هایی که می‌نویسیم، متفاوت‌تر فکر کنیم.
در شیوه Property-Based Testing تست‌ها نه با نوشتن مثال، بلکه با توصیف قوانین و خصوصیات نوشته می‌شوند و سپس مثال‌ها توسط فریم‌ورک‌های مربوطه تولید می‌شوند.

در این کارگاه آموزشی، ما تست‌های یک Domain Model را به صورت Property-Based و با رویکرد TDD می‌نویسیم و بررسی می‌کنیم که با استفاده از Property-Based Testing چگونه می‌توان Invariant ها را در تست به بخش‌های کوچک‌تر تقسیم کرد و در گام‌های کوچک توسعه داد.

هدف از این کارگاه این است که به شرکت کنندگان نشان دهد که چگونه می‌توانند از Property-Based Testing به عنوان ابزاری برای کاوش و بررسی عمیق‌تر مساله و توسعه با گام‌های کوچک استفاده کنند.

مدرسان: هادی احمدی و سپهر نامدار

تاریخ: جمعه سوم بهمن – ساعت ۱۶:۳۰ الی ۱۸:۳۰

🔺ظرفیت شرکت در این کارگاه محدود و تنها ۲۴ نفر است.

جهت کسب اطلاعات بیشتر و ثبت‌نام به لینک زیر مراجعه کنید:
https://evand.com/events/testing-invariants-with-property-based-testing-8902

اطلاعیه برگزاری جلسه بحث آزاد

📣اطلاعیه برگزاری جلسه بحث آزاد

اطلاعیه برگزاری جلسه بحث آزاد انجمن DDD ایران

با هدف تبادل تجربه و به اشتراک‌گذاری دیدگاه‌ها، انجمن DDD ایران در نظر دارد تا جلسه‌‌ی بحث آزاد با موضوع «بررسی چالش‌های تیم‌ها/سازمان‌ها در بکارگیری رویکرد Domain-Driven Design» را برگزار کند. لذا از شما عزیزان دعوت می‌کنیم تا با حضور در این جلسه، از چالش‌هایی که با آن مواجه بوده‌اید صحبت کنید و تجربیات خودتان را با دیگران به اشتراک بگذارید.

این جلسه آنلاین و شرکت در آن رایگان است.

⏱ زمان: جمعه دوم آبان ۱۳۹۹ – ساعت ۱۸ الی ۲۰

💭 لینک ورود: https://m.teamlink.co/8587898606

🔸 توجه: این جلسه در پلتفرم TeamLink برگزار می‌شود و لازم است که پیش از ورود به جلسه، اپلیکیشن آن را نصب نمایید. برای نصب اپلیکیشن به لینک زیر مراجعه کنید:

https://www.teamlink.co/download.html