گزارش برگزاری اولین دوره آموزش 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

وبینار مایکروسرویس، خودمختاری تیم‌ها (چرایی، چگونگی، چالش‌ها)

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

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

شرکت در این وبینار رایگان است.

لینک ثبت‌نام: https://evnd.co/Dhoas
زمان: جمعه ۱۹ شهریور | ۱۶:۳۰ الی ۱۸:۳۰

-انجمن DDD ایران

پترن‌ها، رهیافت‌ها (Heuristics) و فیل‌ها!

پترن‌ها، رهیافت‌ها (Heuristics) و فیل‌ها! چرا فیل‌ها؟ چون فیل‌ها به مانند پدیده قابل مشاهده یا یک پترن در طبیعت می‌باشند. آن‌ها را می‌بینیم، به روش‌ها مختلف توصیف می‌شوند و اطلاعاتی درباره‌شان ارائه می‌شود و حتی بعضی‌ها ادعا می‌کنند که همه چیز را درباره فیل‌ها می‌دانند. اما در حقیقت دانش ما از فیل‌ها محدود می‌باشد.

این مقاله با در نظر گرفتن فیل‌ها به عنوان یک مثال خوب در این زمینه به چالش‌ها، تابوها و مشکلات مربوط به درک و استفاده از پترن‌ها و رهیافت‌ها می‌پردازد. اما این موارد چه چیزهایی می‌توانند باشند؟ چالش نحوه ارائه و توضیح یک پترن برای نویسندگان این حوزه، نحوه برخورد با پترن‌های جدید و نوظهور، ایده داشتن یک کتاب فقط برای یک پترن خاص، نحوه ادراک پترن‌ها، حداقل پرسشگری مورد نیاز و … تنها نمونه‌هایی از موضوعاتی هستند که می‌توان در مورد آنها صحبت کرد. این مشکلات و دغدغه‌ها به مانند فیل در اتاق (The elephant in the room) وجود دارند اما کسی درباره آن‌ها حرفی نمی‌زند.

به شخصه دلیلی که بیشتر از همه من را تشویق به مطالعه این مقاله کرد کنجکاوی درباره mindset نویسندگان و گردآورندگان حوزه پترن‌های دنیای نرم‌افزار بود. چون زمانی که به مسئله از دور نگاه می‌کنیم در حقیقت ما توسعه دهندگان در حال حل کردن پازل‌ها با روش‌هایی هستیم که این افراد ابداع کرده‌اند. این موضوع قبل از اینکه با این مقاله برخورد کنم چیزی بود که من و یکی از دوستانم یک روز درباره آن صحبت کردیم و دغدغه اصلی‌مان این بود که دقیقاً زاویه نگاه این افراد از کجا نشأت می‌گیرد برای رسیدن به آن چه چهارچوب‌های ذهنی را بایستی شکاند. اگر موضوعات مطرح شده در مقاله برایتان جالب است یا دغدغه‌ای مشابه من دارید مطالعه این مقاله را پیشنهاد می‌کنم.

دانلود مقاله

اطلاعیه برگزاری وبینار 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