TG Telegram Group Link
Channel: انجمن DDD ایران
Back to Bottom
در رویکرد DDD، زبان همه‌جایی (Ubiquitous Language) به‌عنوان پلی میان مفاهیم کسب‌وکار و پیاده‌سازی نرم‌افزاری عمل می‌کند. این زبان از دامنه‌ی کسب‌وکار سرچشمه می‌گیرد و تضمین می‌کند که مدل نرم‌افزار با نیازهای واقعی هم‌راستا باشد. اما آیا این جریان صرفاً از فضای مسئله (دامنه) به فضای راه‌حل (نرم‌افزار) است؟ خیر، تعامل بین این دو فضا کاملاً دوسویه است و مفاهیم نرم‌افزاری نیز به زبان و حتی تفکر کسب‌وکاری نفوذ می‌کنند.

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

چرا این تعامل دوسویه ارزشمند است؟

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

🔸نوآوری در کسب‌وکار: فناوری می‌تواند راه‌های جدیدی برای حل مسائل پیشنهاد دهد. مفهوم «پیشنهادهای شخصی‌سازی‌شده» که از یادگیری ماشین سرچشمه گرفته، نمونه‌ای از تأثیر فناوری بر تحول در بازاریابی و فروش است.

🔸تقویت همکاری: وقتی زبان دامنه و مفاهیم فنی به‌صورت دوسویه بر هم اثر می‌گذارند، گفت‌وگو بین توسعه‌دهندگان و کارشناسان دامنه روان‌تر می‌شود و درک متقابل از محدودیت‌ها و امکانات افزایش می‌یابد.

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

- انجمن DDD ایران
@DDD_IRAN
Please open Telegram to view this post
VIEW IN TELEGRAM
تاریخچه Domain Modeling

مدل‌سازی دامنه (Domain Modeling) یکی از مفاهیم کلیدی در مهندسی نرم‌افزار است که به طراحی و توسعه سیستم‌های نرم‌افزاری با تمرکز بر درک عمیق دامنه مسئله کمک می‌کند. این رویکرد به ایجاد مدل‌هایی از مفاهیم، اشیاء و روابط موجود در یک دامنه خاص می‌پردازد تا نرم‌افزار به شکلی مؤثرتر و دقیق‌تر نیازهای کاربران را برآورده کند. تاریخچه مدل‌سازی دامنه ریشه در تکامل مهندسی نرم‌افزار و نیاز به مدیریت پیچیدگی‌های روزافزون سیستم‌ها دارد.

ریشه‌ها: دهه‌های 1960 و 1970
مدل‌سازی دامنه به‌صورت رسمی در دهه‌های 1960 و 1970 شکل نگرفت، اما مفاهیم اولیه آن در روش‌های برنامه‌نویسی ساخت‌یافته و تحلیل سیستم‌ها دیده می‌شود. در این دوره، مهندسان نرم‌افزار با چالش‌های طراحی سیستم‌های بزرگ‌تر مواجه شدند. نیاز به درک بهتر دامنه‌های مسئله، مانند سیستم‌های بانکی، صنعتی یا علمی، باعث شد که تحلیلگران شروع به مستندسازی موجودیت‌ها و روابط بین آن‌ها کنند. این کار به نوعی پیش‌زمینه‌ای برای مدل‌سازی دامنه بود.
یکی از تأثیرات مهم این دوره، ظهور مفاهیم مدل‌سازی داده‌ها بود. با معرفی پایگاه‌های داده رابطه‌ای توسط ادگار کاد (Edgar F. Codd) در سال 1970، مدل‌سازی موجودیت‌ها و روابط آن‌ها به شکلی ساخت‌یافته‌تر انجام شد. این مدل‌ها به توسعه‌دهندگان کمک کردند تا داده‌های دامنه را به‌صورت منطقی سازمان‌دهی کنند.

دهه 1980: ظهور برنامه‌نویسی شیءگرا
دهه 1980 نقطه عطفی در تاریخچه مدل‌سازی دامنه بود. با ظهور برنامه‌نویسی شیءگرا (Object-Oriented Programming) و زبان‌هایی مانند Smalltalk و سی‌پلاس‌پلاس، مفهوم مدل‌سازی دامنه به شکلی پیشرفته‌تر مطرح شد. در این رویکرد، مفاهیم دامنه به‌صورت اشیاء (Objects) مدل‌سازی شدند که شامل داده‌ها (ویژگی‌ها) و رفتارها (متدها) بودند. این روش امکان بازنمایی دقیق‌تری از دامنه‌های واقعی را فراهم کرد.
در همین دوره، متدولوژی‌های طراحی شیءگرا مانند OMT (Object Modeling Technique) و روش‌های بووچ (Booch Method) معرفی شدند. این متدولوژی‌ها بر ایجاد مدل‌هایی از دامنه تأکید داشتند که نه‌تنها داده‌ها، بلکه رفتارها و تعاملات را نیز شامل می‌شدند. این مدل‌ها به توسعه‌دهندگان کمک کردند تا سیستم‌هایی منسجم‌تر و قابل‌نگهداری‌تر طراحی کنند.

دهه 1990: شکل‌گیری UML و DDD
دهه 1990 شاهد پیشرفت‌های چشمگیری در مدل‌سازی دامنه بود. یکی از مهم‌ترین تحولات این دوره، معرفی زبان مدل‌سازی یکپارچه (Unified Modeling Language - UML) بود. UML، که توسط گریدی بووج، جیمز رامبو و ایوار یاکوبسون توسعه یافت، به‌عنوان یک استاندارد برای مدل‌سازی نرم‌افزارهای شیءگرا پذیرفته شد. نمودارهای UML، مانند نمودار کلاس و نمودار مورد استفاده (Use Case)، ابزارهای قدرتمندی برای نمایش دامنه‌های پیچیده فراهم کردند.

در اواخر دهه 1990 و اوایل دهه 2000، مفهوم طراحی مبتنی بر دامنه (Domain-Driven Design - DDD) توسط اریک اوانز (Eric Evans) معرفی شد. کتاب او با عنوان Domain-Driven Design: Tackling Complexity in the Heart of Software (2003) به یکی از مراجع اصلی این حوزه تبدیل شد. DDD بر تمرکز عمیق بر دامنه، همکاری نزدیک با کارشناسان دامنه و ایجاد یک زبان مشترک (Ubiquitous Language) بین توسعه‌دهندگان و ذی‌نفعان تأکید داشت. این رویکرد، مدل‌سازی دامنه را از یک فعالیت صرفاً فنی به یک فرآیند مشترک و استراتژیک تبدیل کرد.

دهه 2000 و پس از آن: تکامل و پذیرش گسترده
با معرفی DDD، مدل‌سازی دامنه به‌عنوان یک رویکرد استراتژیک در توسعه نرم‌افزارهای پیچیده مورد توجه قرار گرفت. مفاهیمی مانند (Entities)، (Value Objects)، (Domain Services) و زمینه‌های محدود (Bounded Contexts) به توسعه‌دهندگان کمک کردند تا سیستم‌های مقیاس‌پذیر و قابل‌نگهداری طراحی کنند.

در دهه 2010، با گسترش معماری‌های میکروسرویس، مدل‌سازی دامنه اهمیت بیشتری یافت. DDD به‌ویژه در تعریف زمینه‌های محدود برای تفکیک سرویس‌ها و مدیریت پیچیدگی‌های سیستم‌های توزیع‌شده بسیار مؤثر بود. ابزارهای مدل‌سازی مانند Event Storming نیز در این دوره محبوب شدند که به تیم‌ها کمک می‌کردند تا جریان‌های کاری و رویدادهای دامنه را به‌صورت بصری مدل‌سازی کنند.
امروزه، مدل‌سازی دامنه در کنار فناوری‌های مدرن مانند کلان‌داده، هوش مصنوعی و سیستم‌های ابری همچنان در حال تکامل است.

- انجمن DDD ایران
@DDD_IRAN
آشنایی با تکنیک Domain Storytelling: پلی برای فهم مشترک

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

پیشنهاد می‌کنیم تکنیک Domain Storytelling را بیازمایید. روشی که نه تنها دانش را منتقل می‌کند، بلکه داستان‌گویی را به ابزاری برای خلق فهم مشترک تبدیل می‌سازد.

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

اجزای یک داستان دامنه
هر داستان از عناصری ساده اما قدرتمند تشکیل شده است:

🔹بازیگران (Actors): انسان‌ها یا سیستم‌هایی که در فرآیند نقش دارند، از کارمند ساده گرفته تا یک نرم‌افزار اتوماسیون.

🔹فعالیت‌ها (Activities): کارهایی که انجام می‌شوند، مانند «ثبت سفارش» یا «ارسال ایمیل تأیید».

🔹اشیاء کاری (Work Objects): چیزهایی که در فرآیند جابه‌جا یا تغییر می‌کنند، مانند یک فرم سفارش یا یک بسته پستی.

🔹رویدادها: نقاط عطفی که نشان‌دهنده اتفاقات مهم در جریان کار هستند.

این عناصر، با پیکان‌هایی که جریان را نشان می‌دهند، به‌صورت بصری به هم متصل می‌شوند. نتیجه، نه یک نمودار فنی پیچیده، بلکه یک داستان مصور است که همه می‌توانند آن را بخوانند و درک کنند.

چرا Domain Storytelling؟
شاید بپرسید چرا باید به جای روش‌های سنتی تحلیل، به سراغ داستان‌گویی رفت؟ پاسخ در سادگی و قدرت ارتباطی این روش نهفته است. در جهانی که سوءتفاهم‌ها بین تیم‌های فنی و غیرفنی پروژه‌ها را به تأخیر می‌اندازند، Domain Storytelling به‌عنوان پلی عمل می‌کند که شکاف‌های ارتباطی را پر می‌کند. این تکنیک به ذی‌نفعان اجازه می‌دهد تا نه تنها فرآیندها را بهتر درک کنند، بلکه ناسازگاری‌ها، گلوگاه‌ها یا حتی فرصت‌های بهبود را شناسایی کنند.
برای مثال، تصور کنید یک شرکت تجارت الکترونیک در تلاش است تا فرآیند تحویل کالا را بهبود بخشد. با استفاده از Domain Storytelling، تیم می‌تواند داستان سفر یک سفارش از لحظه ثبت تا رسیدن به دست مشتری را ترسیم کند. در این فرآیند، ممکن است متوجه شوند که تأخیر در انبار به دلیل فقدان یک سیستم اطلاع‌رسانی خودکار است. این بینش، که از دل یک داستان ساده بیرون آمده، می‌تواند به تغییرات واقعی در کسب‌وکار منجر شود.

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

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

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

- انجمن DDD ایران
@DDD_IRAN
هوش مصنوعی به‌عنوان اردک پلاستیکی: تقویت خلاقیت در مهندسی نرم‌افزار

در دنیای مهندسی نرم‌افزار، تکنیک «اردک پلاستیکی» (Rubber Duck Debugging) به‌عنوان روشی ساده اما قدرتمند برای حل مسائل شناخته می‌شود. برنامه‌نویسان با توضیح مشکل خود به یک شیء بی‌جان، مانند یک اردک پلاستیکی، اغلب به راه‌حل می‌رسند. اما چه می‌شود اگر این اردک بتواند پاسخ دهد، سؤال بپرسد یا حتی ایده‌های جدید پیشنهاد کند؟ برخی معتقدند که هوش مصنوعی (AI) می‌تواند نقش یک «اردک پلاستیکی سخنگو» را ایفا کند و خلاقیت را در فرآیند توسعه نرم‌افزار تقویت کند.

تکنیک اردک پلاستیکی چیست؟
تکنیک اردک پلاستیکی ریشه در یک ایده ساده دارد: وقتی برنامه‌نویسان مشکل خود را با صدای بلند برای یک شنونده غیرانسانی توضیح می‌دهند، مجبور می‌شوند مسئله را به شکلی واضح و ساختاریافته بیان کنند. این فرآیند خود-بازبینی اغلب به شناسایی خطاها یا دیدگاه‌های جدید منجر می‌شود. اردک پلاستیکی نیازی به پاسخ دادن ندارد؛ نقش آن صرفاً ایجاد فضایی برای تفکر است.

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

🔹تعامل فعال داشته باشد: AI می‌تواند سؤالاتی هدفمند بپرسد یا نکاتی را برجسته کند که برنامه‌نویس ممکن است نادیده گرفته باشد.

🔹ایده‌های جدید پیشنهاد دهد: با دسترسی به دانش گسترده، AI می‌تواند راه‌حل‌های جایگزین یا نمونه‌هایی از پروژه‌های مشابه ارائه دهد.

🔹همدلی شبیه‌سازی کند: لحن همدلانه یا پرس‌وجوهای تشویقی AI می‌تواند برنامه‌نویسان را به کاوش عمیق‌تر مسائل ترغیب کند.

این ویژگی‌ها AI را به ابزاری تبدیل می‌کنند که نه‌تنها فرآیند حل مسئله را تسهیل می‌کند، بلکه می‌تواند جرقه‌ای برای خلاقیت باشد.

آیا AI خلاقیت را تقویت می‌کند؟
استفاده از AI به‌عنوان یک اردک پلاستیکی می‌تواند به دلایل زیر خلاقیت را در مهندسی نرم‌افزار تقویت کند:
1. تشویق به تفکر چندزاویه‌ای
وقتی برنامه‌نویسان مشکل خود را برای AI توضیح می‌دهند، مجبور می‌شوند آن را ساده و ساختارمند بیان کنند، درست مانند تکنیک اردک سنتی. اما پاسخ‌های AI، مانند سؤالات چالش‌برانگیز یا پیشنهادات غیرمنتظره، می‌تواند آن‌ها را به کاوش زوایای جدیدی از مسئله ترغیب کند. این تعامل پویا به ایده‌پردازی خلاقانه کمک می‌کند.

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

3. الهام از طریق بازخورد
هوش مصنوعی می‌تواند با ارائه بازخوردهای هوشمند، مانند الگوهای طراحی مرتبط یا تکنیک‌های حل مسئله، به برنامه‌نویسان الهام ببخشد. این بازخوردها می‌توانند به راه‌حل‌های نوآورانه‌ای منجر شوند که شاید به‌تنهایی به ذهن برنامه‌نویس نرسیده باشند.

نتیجه‌گیری

هوش مصنوعی، وقتی به‌عنوان یک «اردک پلاستیکی سخنگو» استفاده شود، می‌تواند ابزاری قدرتمند برای تقویت خلاقیت در مهندسی نرم‌افزار باشد. این رویکرد، با ترکیب خود-بازبینی تکنیک اردک سنتی و تعامل پویای AI، به برنامه‌نویسان کمک می‌کند تا مسائل را از زوایای جدید ببینند، ایده‌های نوآورانه تولید کنند و راه‌حل‌های مؤثرتری خلق کنند. بااین‌حال، برای حداکثر اثربخشی، AI باید به‌عنوان یک شریک خلاق عمل کند، نه جایگزینی برای تفکر مستقل.

- انجمن DDD ایران
@DDD_IRAN
اهمیت فزاینده نامگذاری در زمانه‌ی ظهور Vibe Coding

نامگذاری در کد همواره یکی از جنبه‌های پر چالش توسعه نرم‌افزار بوده است، زیرا نام‌های دقیق و شفاف، درک و نگهداری کد را برای توسعه‌دهندگان آسان‌تر می‌کنند. اما امروز، با ظهور ابزارهای هوشمند مانند مدل‌های زبانی بزرگ (LLM)، اهمیت نامگذاری بیش از پیش برجسته شده است. در گذشته، تنها توسعه‌دهندگان بودند که باید نام‌ها را درک می‌کردند، اما حالا LLM‌ها نیز باید قادر به تفسیر صحیح این نام‌ها باشند تا بتوانند در فرآیندهایی مانند پیشنهاد کد، رفع اشکال یا تولید مستندات به درستی عمل کنند. این تحول، ما را به مفهوم زبان فراگیر (Ubiquitous Language) در طراحی مبتنی بر دامین (DDD) رهنمون می‌کند، که نقشی کلیدی در ایجاد شفافیت و انسجام ایفا می‌کند.

زبان فراگیر، به عنوان یکی از ارکان DDD، زبانی مشترک و دقیق است که توسط همه اعضای تیم—از توسعه‌دهندگان و تحلیلگران تا متخصصان دامین—برای توصیف مفاهیم و فرآیندهای دامین استفاده می‌شود. این زبان، با تأکید بر نامگذاری تخصصی و صریح دامین، از ابهام پرهیز می‌کند و تضمین می‌کند که هر مفهوم در کد، مستندات و گفتگوها به شکلی یکنواخت بیان شود. برای مثال، در یک سیستم بانکی، به جای نام مبهم Transaction که می‌تواند معانی متعددی داشته باشد، استفاده از نام‌های دقیق‌تری مانند FundTransfer یا AccountDebit نه تنها برای توسعه‌دهندگان، بلکه برای LLM‌ها نیز درک بهتری از رفتار سیستم فراهم می‌کند.

نامگذاری ضعیف یا مبهم، مانند استفاده از کلمه Record به جای PatientMedicalHistory در یک سیستم پزشکی، می‌تواند LLM‌ها را به تفسیرهای نادرست هدایت کند، زیرا این ابزارها به شدت به کانتکست وابسته‌اند. در مقابل، نامگذاری مبتنی بر زبان فراگیر، کدی تولید می‌کند که مانند متنی خوش‌ساخت، داستان دامین را به شکلی روان روایت می‌کند. این شفافیت، همکاری بین تیم‌های فنی و غیرفنی را تقویت می‌کند و به LLM‌ها امکان می‌دهد پیشنهادات دقیق‌تری ارائه دهند یا اشکالات را سریع‌تر شناسایی کنند.

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

- انجمن DDD ایران
@DDD_IRAN
معرفی Data Mesh: پارادایمی نوین برای مدیریت داده‌ها

شبکه داده (Data Mesh) یک پارادایم نوظهور در مدیریت داده‌ها است که توسط ژامک دهقانی در سال 2019 معرفی شد. این رویکرد به‌منظور رفع چالش‌های مقیاس‌پذیری، پیچیدگی و تمرکززدایی در سازمان‌های داده‌محور طراحی شده است. برخلاف معماری‌های سنتی داده مانند Data Warehouse یا Data Lake که معمولاً متمرکز هستند، Data Mesh بر توزیع مسئولیت‌ها و مالکیت داده‌ها در میان تیم‌های مختلف تأکید دارد. این مدل به‌ویژه برای سازمان‌هایی مناسب است که با حجم عظیمی از داده‌ها و نیاز به چابکی در تحلیل و بهره‌برداری از آن‌ها مواجه هستند.

اصول کلیدی Data Mesh
شبکه داده بر چهار اصل اساسی استوار است:

مالکیت داده‌ها بر اساس دامنه (Domain-Oriented Ownership): به‌جای مدیریت متمرکز داده‌ها توسط یک تیم مرکزی، مسئولیت داده‌ها به تیم‌های مرتبط با دامنه‌های کسب‌وکاری واگذار می‌شود. هر تیم دامنه‌ای، داده‌های خود را به‌عنوان یک محصول مدیریت می‌کند و مسئولیت کیفیت، دسترسی و مستندسازی آن را بر عهده دارد.

داده به‌عنوان محصول (Data as a Product): داده‌ها باید مانند یک محصول تجاری با کیفیت بالا، قابل‌اعتماد و کاربرپسند ارائه شوند. این اصل بر ارائه داده‌ها با مستندات کامل، رابط‌های استاندارد و قابلیت کشف‌پذیری تأکید دارد.

زیرساخت خودخدمت (Self-Serve Data Platform): برای پشتیبانی از تیم‌های دامنه‌ای، یک پلتفرم داده‌ای خودخدمت ارائه می‌شود که ابزارها و قابلیت‌هایی مانند پردازش داده، ذخیره‌سازی و تحلیل را در اختیار تیم‌ها قرار می‌دهد. این پلتفرم امکان استقلال تیم‌ها را فراهم می‌کند.

حاکمیت فدرال (Federated Governance): به‌جای حاکمیت متمرکز، Data Mesh از یک مدل حاکمیتی فدرال استفاده می‌کند که در آن استانداردهای مشترک (مانند فرمت داده، امنیت و انطباق) توسط تیم‌های دامنه‌ای و با همکاری یک تیم حاکمیتی مرکزی تعریف می‌شود.


مزایای Data Mesh

▫️مقیاس‌پذیری: با توزیع مسئولیت‌ها، Data Mesh به سازمان‌ها کمک می‌کند تا با افزایش حجم داده‌ها و پیچیدگی‌های سازمانی کنار بیایند.
▫️چابکی: تیم‌های دامنه‌ای می‌توانند به‌سرعت داده‌ها را تولید، اصلاح و به اشتراک بگذارند، بدون وابستگی به تیم‌های مرکزی.
▫️کیفیت بالاتر داده‌ها: مالکیت داده‌ها توسط تیم‌های دامنه‌ای منجر به بهبود کیفیت و دقت داده‌ها می‌شود، زیرا این تیم‌ها به نیازهای کسب‌وکاری خود آگاه‌تر هستند.
▫️کاهش گلوگاه‌ها: حذف وابستگی به تیم‌های مرکزی داده، گلوگاه‌های عملیاتی را کاهش می‌دهد و سرعت تحویل را افزایش می‌دهد.

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

نتیجه‌گیری
شبکه داده یک تحول اساسی در مدیریت داده‌ها ارائه می‌دهد که با نیازهای سازمان‌های مدرن هم‌خوانی دارد. با تمرکز بر توزیع مالکیت، محصول‌محوری داده‌ها و زیرساخت‌های خودخدمت، این پارادایم به سازمان‌ها کمک می‌کند تا داده‌های خود را به‌صورت مؤثرتر و چابک‌تر مدیریت کنند. اگرچه پیاده‌سازی آن نیازمند تلاش و هماهنگی است، اما مزایای بلندمدت آن در مقیاس‌پذیری و نوآوری داده‌محور، Data Mesh را به گزینه‌ای جذاب برای سازمان‌های داده‌محور تبدیل کرده است.

اطلاعات بیشتر:
https://youtu.be/CDWp_xyCdzw?si=ec_WmBXWTNeqSFcq
- انجمن DDD ایران
@DDD_IRAN
آیا نوشتن تست خودکار با ظهور هوش مصنوعی کار مقرون به صرفه‌ای است؟

با پیشرفت هوش مصنوعی (AI) در توسعه نرم‌افزار، نوشتن تست‌های خودکار به روش سنتی در برخی موارد و به دلایل زیر می‌تواند مقرون به صرفه نباشد. این موضوع به دلیل توانایی هوش مصنوعی در تولید خودکار کد و تست، تغییر چرخه توسعه نرم‌افزار، و کاهش هزینه‌های نگهداری تست‌ها است.

۱. تولید خودکار کدها و تست‌ها
ابزارهای هوش مصنوعی، مانند مدل‌های زبانی پیشرفته، می‌توانند کد و تست‌های خودکار را به‌سرعت تولید کنند. برای مثال، برای یک تابع ساده، هوش مصنوعی نه تنها کد را می‌نویسد، بلکه تست‌های واحد و لبه‌ای را نیز ایجاد می‌کند. این قابلیت زمان و تلاش مورد نیاز برای نوشتن دستی تست‌ها را به شدت کاهش می‌دهد. در نتیجه، صرف زمان برای توسعه تست‌های سنتی کمتر توجیه‌پذیر است، زیرا هوش مصنوعی همان کار را با سرعت و دقت بیشتری انجام می‌دهد.

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

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

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

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

-انجمن DDD ایران
@DDD_IRAN
چرا تکنیک Event Storming با تأکید بر Eventها شروع می‌شود؟

تکنیک Event Storming یکی از تکنیک‌های موثری است که برای مدل‌سازی فرآیندهای کسب‌وکار و کشف دامنه‌های پیچیده به کار می‌رود. این روش با تأکید بر شناسایی Eventها (رویدادها) به‌عنوان نقطه شروع فرآیند مدل‌سازی آغاز می‌شود. اما چرا Eventها در این تکنیک نقش محوری دارند و چرا باید ابتدا آن‌ها را شناسایی کنیم؟

۱. تمرکز بر رفتار دامنه
رویدادها نشان‌دهنده اتفاقات معناداری هستند که در دامنه کسب‌وکار رخ می‌دهند، مانند «سفارش ثبت شد»، «پرداخت انجام شد» یا «محصول به انبار اضافه شد». این رویدادها نقاط عطف فرآیندها و تغییرات حالت در سیستم را مشخص می‌کنند. با شروع از Eventها، تیم مدل‌سازی به‌جای تمرکز بر ساختارهای داده‌ای یا موجودیت‌ها، ابتدا بر رفتار سیستم تمرکز می‌کند. این رویکرد رفتارمحور (Behavior-Driven) به درک عمیق‌تر و واقعی‌تر از چگونگی عملکرد دامنه کمک می‌کند و از پیچیدگی‌های غیرضروری در مراحل اولیه جلوگیری می‌نماید.

۲. ایجاد زبان مشترک
یکی از اهداف کلیدی در DDD، ایجاد زبان مشترک (Ubiquitous Language) بین ذی‌نفعان مختلف، از جمله توسعه‌دهندگان، کارشناسان کسب‌وکار و مدیران است. Eventها به دلیل ماهیت ساده و ملموسشان، به‌عنوان ابزاری برای برقراری این زبان مشترک عمل می‌کنند. برای مثال، عبارتی مانند «سفارش لغو شد» برای همه قابل‌فهم است و نیازی به دانش فنی ندارد. شروع با شناسایی Eventها به تیم کمک می‌کند تا روی توصیفات مشترک و قابل‌فهم توافق کنند و از سوءتفاهم‌های ناشی از اصطلاحات تخصصی جلوگیری شود.

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

۴. کاهش پیچیدگی در مدل‌سازی
تمرکز اولیه بر موجودیت‌ها (Entities) یا ساختارهای داده‌ای می‌تواند تیم را درگیر جزئیات فنی و پیچیدگی‌های زودهنگام کند. در مقابل، Eventها معمولاً ساده‌تر و قابل‌فهم‌تر هستند. شروع با Eventها به تیم اجازه می‌دهد بدون غرق شدن در پیچیدگی‌های فنی، ابتدا روی چیستی دامنه و اتفاقات مهم آن تمرکز کند. این رویکرد تدریجی، فرآیند مدل‌سازی را روان‌تر و مؤثرتر می‌کند.

۵. تسهیل کشف Commandها و Aggregateها
رویدادها به‌ عنوان خروجی‌های فرآیندها، سرنخ‌هایی برای شناسایی Commandها (دستورات) و Aggregateها ارائه می‌دهند. برای مثال، Event «سفارش ثبت شد» می‌تواند به Command «ثبت سفارش» و Aggregate «سفارش» اشاره داشته باشد. با شناسایی Eventها در ابتدا، تیم می‌تواند به‌صورت طبیعی و منطقی به سمت کشف سایر اجزای مدل دامنه، مانند Commandها، Aggregateها و قوانین کسب‌وکار حرکت کند. این فرآیند گام‌به‌گام به ایجاد مدلی دقیق و منسجم منجر می‌شود.

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

-انجمن DDD ایران
@DDD_IRAN
در زمانه‌ای که تیترهای پر زرق‌و‌برق هوش مصنوعی فریاد می‌زنند «بدون کدنویسی اپلیکیشن ساختم!»، این مطلب خواندنی از Vlad Khononov ما یادآوری می‌کند که چرا «ماژولاریتی» اهمیت فزاینده‌ای پیدا کرده و چگونه می‌تواند در این زمانه به ابزارهای کدنویسی با کمک هوش مصنوعی کمک کند. این نوشته مفهوم مدولاریتی را از دهه ۶۰ میلادی تا امروز دنبال می‌کند و نشان می‌دهد چرا در عصر مدل‌های زبانی بزرگ (LLMها)، طراحی ماژولار نه فقط یک انتخاب، بلکه یک ضرورت است.

ماژولاریتی چیست؟ سیستمی که تغییرش آسان باشد: بدانید چه بخش‌هایی را باید تغییر دهید و پیش‌بینی کنید تغییر چه اثری خواهد داشت. در مقابل، پیچیدگی مانند بمبی ساعتی است که نمی‌دانید با دستکاری‌اش چه انفجاری رخ می‌دهد. این مقاله با مثال‌هایی ملموس، از بار شناختی انسان تا محدودیت‌های context window در LLMها، توضیح می‌دهد که چرا ماژولها در طراحی سیستم‌ها حیاتی‌تر از گذشته شده‌اند.

The Golden Age of Modularity
https://www.linkedin.com/pulse/golden-age-modularity-vlad-khononov-swjbf
توسعه نرم‌افزار: یک فعالیت اجتماعی-فنی

توسعه نرم‌افزار فراتر از نوشتن کد و طراحی سیستم‌هاست؛ این فرآیند به‌عنوان یک فعالیت اجتماعی-فنی (Socio-Technical) شناخته می‌شود که در آن عوامل انسانی و فنی به‌طور جدایی‌ناپذیری درهم‌تنیده‌اند. موفقیت یک پروژه نرم‌افزاری نه‌تنها به فناوری‌های پیشرفته، بلکه به همکاری تیمی، ارتباطات شفاف و فرهنگ سازمانی نیز وابسته است.

چرا توسعه نرم‌افزار یک فعالیت اجتماعی-فنی است؟

توسعه نرم‌افزار نیازمند تعادل بین دو بعد اصلی است: بعد اجتماعی و بعد فنی. بعد اجتماعی شامل تعاملات انسانی، از همکاری بین توسعه‌دهندگان و تحلیل‌گران گرفته تا گفت‌وگو با ذی‌نفعان و مشتریان است. برای مثال، در رویکرد طراحی مبتنی بر دامنه (DDD)، ایجاد زبان مشترک بین تیم فنی و کارشناسان کسب‌وکار برای مدل‌سازی دقیق نیازها ضروری است. فرهنگ سازمانی نیز نقش کلیدی دارد؛ تیمی که بازخورد را تشویق می‌کند، نوآوری بیشتری تولید می‌کند، در حالی که فرهنگ‌های بسته می‌توانند انگیزه را کاهش دهند.

در مقابل، بعد فنی شامل ابزارها، معماری سیستم و کیفیت کد است. انتخاب فناوری مناسب، طراحی سیستم‌های مقیاس‌پذیر و استفاده از فرآیندهای خودکار مانند CI/CD برای اطمینان از کارایی و قابلیت نگهداری حیاتی هستند. با این حال، این دو بعد به‌طور مداوم بر یکدیگر تأثیر می‌گذارند. تصمیمات فنی ممکن است تحت تأثیر ترجیحات تیمی یا فشارهای سازمانی قرار گیرند، و مشکلات ارتباطی می‌توانند به بدهی فنی منجر شوند.

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

پیامدهای اجتماعی-فنی بودن

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

🔹 دوم، روش‌های چابک مانند اسکرام یا کانبان برای هماهنگی جنبه‌های اجتماعی و فنی طراحی شده‌اند. جلسات روزانه، بازخورد مستمر و همکاری نزدیک با ذی‌نفعان به تیم‌ها کمک می‌کند تا با تغییرات سازگار شوند.

🔹 سوم، ابزارها و فرآیندها باید تعاملات انسانی را تسهیل کنند. برای مثال، ابزارهایی مانند GitHub یا Slack همکاری را بهبود می‌بخشند، اما انتخاب ابزار نامناسب می‌تواند ارتباطات را مختل کند.

🔹 چهارم، سازمان‌ها باید بدهی فنی (مشکلات در کد) و بدهی اجتماعی (مشکلات در اعتماد یا ارتباطات) را مدیریت کنند. نادیده گرفتن بدهی اجتماعی می‌تواند به کاهش انگیزه یا تعارض منجر شود، در حالی که بدهی فنی هزینه‌های نگهداری را افزایش می‌دهد. در نهایت، ایجاد فرهنگ یادگیری که اشتباهات را فرصتی برای رشد بداند، برای نوآوری و کیفیت ضروری است.

جمع‌بندی

توسعه نرم‌افزار به دلیل نیاز به همکاری انسانی و فناوری پیشرفته، یک فعالیت اجتماعی-فنی است. این ماهیت ایجاب می‌کند که سازمان‌ها در کنار ابزارهای فنی، روی مهارت‌های تیمی، فرآیندهای چابک و فرهنگ مثبت سرمایه‌گذاری کنند. نادیده گرفتن هر یک از این جنبه‌ها می‌تواند به شکست پروژه منجر شود، اما توجه به آن‌ها می‌تواند به تولید نرم‌افزارهایی با کیفیت و تأثیرگذار منجر گردد.

- انجمن DDD ایران
@DDD_IRAN
هم‌افزایی ایده‌های مطرح در Team Topologies و Domain-Driven Design

در دنیای توسعه نرم‌افزار، هم‌راستایی و تناسب ساختار تیم‌ها با معماری سیستم و اهداف کسب‌وکار برای تحویل سریع و مؤثر ارزش به مشتری حیاتی است. رویکرد Domain-Driven Design و چارچوب Team Topologies دو رویکرد مکمل هستند که این هم‌راستایی را تسهیل می‌کنند. اما چرا تیم‌های جریان ارزش (Stream-Aligned Teams) در Team Topologies با Bounded Context ها در DDD هم‌راستا می‌شوند؟!

در DDD، مفهوم B.C یک مفهوم کلیدی است که بخشی مشخص از دامنه کسب‌وکار را با مدلی خاص، زبان فراگیر (Ubiquitous Language)، و قوانین داخلی خود تعریف می‌کند. هر B.C به‌گونه‌ای طراحی می‌شود که مستقل باشد و از طریق رابط‌های مشخص، مانند APIها یا رویدادها، با سایر B.C ها تعامل کند. برای مثال، در یک سیستم تجارت الکترونیک، مدیریت موجودی و پردازش سفارشات ممکن است به‌عنوان دو B.C جداگانه تعریف شوند، هرکدام با مفاهیم و قوانین خاص خود.

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

▫️ تیم‌های جریان ارزش در Team Topologies
چارچوب Team Topologies، ارائه‌شده توسط متیو اسکلتون و مانوئل پایس، چهار نوع تیم را معرفی می‌کند: تیم‌های جریان ارزش (Stream-Aligned Teams)، تیم‌های توانمندساز (Enabling)، تیم‌های پلتفرم (Platform)، و تیم‌های مختص به زیرسیستم‌های پیچیده (Complicated Subsystem).
تیم‌های جریان ارزش مسئول تحویل مستمر ارزش به مشتری یا کاربر نهایی هستند. این تیم‌ها بر یک جریان ارزش مشخص، مانند یک محصول، سرویس، یا تجربه کاربری، تمرکز دارند و از ابتدا تا انتها مسئول آن هستند.

تیم‌های جریان ارزش برای چابکی و پاسخ‌گویی به نیازهای مشتری طراحی شده‌اند. آن‌ها خودمختار هستند، اما برای تحویل ارزش به همکاری با سایر تیم‌ها، مانند تیم‌های پلتفرم برای زیرساخت یا تیم‌های توانمندساز برای ابزارها، وابسته‌اند. تعاملات این تیم‌ها بر اساس سه مدل تعریف می‌شود: همکاری، خدمت‌رسانی (X-as-a-Service)، و تسهیل‌گری.

▫️چرا ایده تیم‌های جریان ارزش با مفهوم B.C هم راستا است؟
هم‌راستایی تیم‌های جریان ارزش با مفهوم B.C به دلایل زیر منطقی و مؤثر است:

🔹تمرکز بر دامنه مشخص: B.C در DDD به تیم‌ها اجازه می‌دهند تا روی یک بخش مشخص از دامنه کسب‌وکار تمرکز کنند. این تمرکز با هدف تیم‌های جریان ارزش، که تحویل ارزش به مشتری در یک جریان مشخص است، هم‌خوانی دارد. برای مثال، یک تیم جریان ارزش که مسئول تجربه خرید مشتری است، می‌تواند با B.C پردازش سفارشات هم‌راستا شود تا مدل‌های دامنه‌ای مرتبط با سبد خرید و پرداخت را توسعه دهد.

🔹خودمختاری و کاهش وابستگی‌ها: B.C به‌گونه‌ای طراحی شده‌اند که وابستگی‌های بین زیرسیستم‌ها را از طریق رابط‌های مشخص، مانند APIها یا رویدادها، به حداقل برسانند. این استقلال با ایده خودمختاری تیم‌های جریان ارزش هم‌راستاست، زیرا این تیم‌ها می‌توانند به‌صورت مستقل ویژگی‌های جدید را توسعه داده و مستقر کنند، بدون نیاز به هماهنگی گسترده با سایر تیم‌ها. Team Topologies نیز با محدود کردن تعاملات غیرضروری، این خودمختاری را تقویت می‌کند.

🔹انطباق با قانون کانوی: قانون کانوی بیان می‌کند که معماری سیستم‌ها بازتاب ساختار سازمانی تیم‌هاست. هم‌راستایی تیم‌های جریان ارزش با زمینه‌های محدود تضمین می‌کند که ساختار تیم‌ها با معماری سیستم هم‌خوان باشد. این انطباق باعث می‌شود که سیستم‌های نرم‌افزاری منعکس‌کننده مرزهای دامنه باشند و پیچیدگی‌های ارتباطی کاهش یابد.

🔸نتیجه‌گیری
هم‌راستایی تیم‌های جریان ارزش با مفهوم B.C در DDD به دلیل تمرکز مشترک آن‌ها بر دامنه مشخص، خودمختاری، و انطباق با قانون کانوی منطقی است. این هم‌راستایی، همراه با تمرکز تیم‌های جریان ارزش بر تحویل ارزش به مشتری، امکان توسعه سریع و مؤثر ویژگی‌هایی را فراهم می‌کند که نیازهای کسب‌وکار و مشتری را برآورده می‌سازند. ترکیب راهنماهای طراحی در DDD و Team Topologies به تیم‌ها کمک می‌کند تا سیستم‌های مقیاس‌پذیر و مشتری‌محور ایجاد کنند. فرهنگ همکاری و ارتباطات شفاف، کلید موفقیت این هم‌افزایی است.

- انجمن DDD ایران
@DDD_IRAN
🔍 معرفی مختصر Exploratory Domain Discovery (EDD)

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

این رویکرد، ریشه در تفکر سیستماتیک و روایت‌محور دارد. درست مثل یک فیلم یا رمان که همه‌ی اتفاقات برای انتقال یک پیام اصلی طراحی شده‌اند، در دامنه‌ی یک نرم‌افزار هم بیشتر اجزای سیستم در خدمت یک «مفهوم کلیدی» یا همان Main Point هستند؛ چیزی که بدون آن، کل ساختار بی‌معنا می‌شود. در EDD ما تلاش می‌کنیم این نقطه‌ی مرکزی را پیدا کرده و روابط علّی و ساختارهای اطراف آن را کشف کنیم.

🌀 فرآیند اکتشاف در EDD به‌صورت چرخشی (Iterative) و عرضی (Breadth-First) انجام می‌شود. فرض کنید Main Point در مرکز یک‌سری دایره‌ی هم‌مرکز قرار دارد. در دور اول، تصویری کلی و انتزاعی از دامنه ساخته می‌شود. در دورهای بعدی، این دایره تنگ‌تر شده و وارد جزئیات بیشتری می‌شویم. این مدل‌سازی لایه‌لایه، کمک می‌کند پیچیدگی‌ها را بهتر درک کرده و رفتارهای تکرارشونده را بشناسیم.

یکی از ویژگی‌های کلیدی EDD، روایت معکوس (Backward Storytelling) است — یعنی به‌جای اینکه با «از کجا شروع کنیم؟» آغاز کنیم، می‌پرسیم: «ته داستان چیست؟». این دیدگاه باعث می‌شود روابط علت و معلولی واضح‌تر و دقیق‌تر دیده شوند.


🧩 در EDD ما با سه ابزار اصلی کار می‌کنیم:

🟦 مفهوم Domain Concept: هر مفهوم کلیدی که در دامنه وجود دارد را روی یک کارت می‌نویسیم.

🔄 مفهوم Relation : رابطه‌ی بین این مفاهیم را مشخص می‌کنیم، از انتها به ابتدا.

📝 مفهوم Example : برای هر مفهوم، یک نمونه واقعی و قابل لمس می‌نویسیم تا فهم مشترک بین افراد تیم شکل بگیرد.

🎯 مثال کاربردی:

فرض کنید در حال تحلیل یک سیستم حقوق و دستمزد هستید.
از سؤال «ته داستان چیست؟» شروع می‌کنیم: مثلاً صدور فیش حقوقی خروجی نهایی است. آن را روی یک کارت مفهومی (domain concept) یادداشت می‌کنیم. سپس یک گام به عقب: فیش حقوقی حاصل محاسبه‌ی فرمول‌های حقوق است. این فرمول‌ها هم بر اساس کارکرد ماهانه‌ی کارمند محاسبه می‌شوند.
با همین روال، مفاهیم را از پایان به ابتدا کشف و یادداشت می‌کنیم. سپس روابط میان آن‌ها را (باز هم از انتها به ابتدا) ثبت می‌کنیم. در پایان، برای هر مفهوم یک مثال واقعی (concrete example) می‌نویسیم تا از درستی و شفافیت مدل اطمینان حاصل شود.

🧠 فلسفه‌ی EDD:

• بهره‌گیری از تفکر سیستماتیک و روایت‌محور
• تمرکز بر کشف تدریجی و دید کل‌نگر به دامنه
• مدل‌سازی چرخشی برای کشف رفتارهای تکرارشونده دامنه

🔁 الگوهای رایج (Patterns):

چرخه‌های زمانی مثل حقوق ماهیانه یا فرایند رزرو
مفهوم کلیدی (Main Point) که سایر اجزای دامنه حول آن شکل می‌گیرند
روایت معکوس برای کشف روابط علت و معلولی

در نهایت اینکه:
EDD ابزارهای ساده‌ای داره — مثل کارت‌های مفهومی و مثال — اما قدرتش در طرز فکر پشتشه: اینکه قبل از ورود به طراحی یا کدنویسی، دقیقاً بفهمیم چه چیزی را طراحی می‌کنیم و چرا.

📎 اطلاعات بیشتر:
https://exploratorydomaindiscovery.com

-انجمن DDD ایران
@DDD_Iran
یک ارایه جذاب و تماشایی برای آشنایی سریع شما با Domain-Driven Design

سطح: مقدماتی

This conference session will delve into rebuilding Twitter using clean architecture and domain-driven design principles. Specifically, we will cover the following steps:

1. Event storming: We will discuss the importance of event storming in understanding the business requirements and user needs for the new Twitter platform.

2. Bounded contexts: We will identify the bounded contexts within the Twitter system, breaking down the system into smaller, self-contained modules.

3. Aggregates: We will identify the aggregates within each context, improving performance and ensuring consistent data updates.

4. System folder structure: We will discuss the system folder structure and how it should be organized according to clean architecture and domain-driven design principles.

By the end of this session, attendees will have a taste of how to build projects from scratch using clean architecture and domain-driven design principles.

https://www.youtube.com/watch?v=O60aOTfaKrw

- انجمن DDD ایران
@DDD_IRAN
📣اطلاعیه برگزاری رویداد آنلاین

انجمن DDD ایران شما را به رویداد آنلاین با موضوع Exploratory Domain Discovery by example دعوت می‌کند.

در این رویداد مسعود بهرامی به معرفی متدولوژی EDD خواهد پرداخت. مسعود با ارائه مثال‌های عملی نشان خواهد داد که چگونه EDD می‌تواند در اتخاذ تصمیمات استراتژیک در طراحی و مدلسازی محصول، به‌ویژه در شناساییCore Domains، راهگشا باشد.

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

اطلاعات بیشتر در: https://exploratorydomaindiscovery.com


جزئیات رویداد:
• تاریخ برگزاری: پنجشنبه، 25 اردیبهشت 1404
• زمان: 17:00 الی 18:30
• لینک برگزاری: meet.google.com/gpb-uwkg-mtd

منتظر حضور گرم شما در این رویداد هستیم
مدل C4 یک رویکرد بصری و ساختاریافته برای مستندسازی معماری نرم‌افزار است که به مهندسین نرم‌افزار کمک می‌کند تا سیستم‌های پیچیده را به شکلی ساده، قابل فهم و استاندارد نمایش دهند. این مدل، که توسط سایمون براون (Simon Brown) معرفی شده، با ارائه چهار سطح دیاگرام، امکان توصیف سیستم را از نمای کلی تا جزئیات فنی فراهم می‌کند. در این پست، به معرفی این مدل و کاربردهایش برای مهندسین نرم‌افزار می‌پردازیم.

مدل C4 چیست؟
عبارت C4 مخفف Context، Container، Component و Code است که هر کدام یک سطح از دیاگرام‌های معماری را نشان می‌دهند. این مدل به جای استفاده از مستندات متنی طولانی یا دیاگرام‌های بیش از حد پیچیده، با تمرکز بر سادگی و وضوح، ارتباط بین اعضای تیم و ذی‌نفعان غیرفنی را بهبود می‌بخشد. هر سطح از دیاگرام‌ها به یک جنبه خاص از سیستم می‌پردازد و به مهندسین اجازه می‌دهد معماری را در لایه‌های مختلف و با عمق مناسب ارائه کنند.

سطح‌های مدل C4

🔸دیاگرام Context (زمینه): این دیاگرام بالاترین سطح نمای سیستم است و نشان می‌دهد که سیستم چگونه با کاربران، ذی‌نفعان و سیستم‌های خارجی تعامل دارد. هدف آن ارائه یک تصویر کلی و ساده برای همه، از جمله افراد غیرفنی، است. مثلاً، اگر یک پلتفرم تجارت الکترونیک طراحی می‌کنید، این دیاگرام کاربران (مشتریان، ادمین‌ها) و سیستم‌های خارجی (مثل درگاه پرداخت) را نشان می‌دهد.

🔸 دیاگرام Container (کانتینر): این سطح به اجزای اصلی تشکیل‌دهنده سیستم می‌پردازد، مانند اپلیکیشن‌های وب، اپلیکیشن‌های موبایل، دیتابیس‌ها یا سرورها. هر "کانتینر" یک واحد اجرایی مستقل است که بخشی از سیستم را پیاده‌سازی می‌کند. این دیاگرام تعاملات بین کانتینرها و فناوری‌های استفاده‌شده (مثل REST API یا پیام‌رسان‌ها) را نشان می‌دهد. برای مهندسین، این سطح به درک معماری سطح بالا کمک می‌کند.

🔸 دیاگرام Component (کامپوننت): این دیاگرام به داخل هر کانتینر می‌رود و کامپوننت‌های نرم‌افزاری داخل آن (مثل ماژول‌ها یا سرویس‌ها) را نمایش می‌دهد. این سطح برای توسعه‌دهندگانی که روی پیاده‌سازی بخش‌های خاصی از سیستم کار می‌کنند، مفید است. مثلاً، در یک اپلیکیشن وب، ممکن است کامپوننت‌های مربوط به احراز هویت یا مدیریت سبد خرید را ببینید.

🔸 دیاگرام Code (کد): این سطح اختیاری است و معمولاً به صورت دیاگرام‌های UML (مثل دیاگرام کلاس) ارائه می‌شود. این دیاگرام‌ها ساختار کد و جزئیات پیاده‌سازی را نشان می‌دهند. از آنجا که این سطح بسیار فنی است، معمولاً فقط در موارد خاص و برای توسعه‌دهندگان استفاده می‌شود.

چرا مدل C4؟

مدل C4 به دلایل متعددی برای مهندسین نرم‌افزار جذاب است:

🔹 سادگی و وضوح: دیاگرام‌های C4 به شکلی طراحی شده‌اند که هم برای توسعه‌دهندگان و هم برای مدیران پروژه یا ذی‌نفعان غیرفنی قابل فهم باشند.
🔹 انعطاف‌پذیری: می‌توانید بسته به نیاز پروژه، فقط دیاگرام‌های مورد نیاز (مثلاً Context و Container) را تهیه کنید.
🔹 همکاری تیمی: این مدل با استانداردسازی مستندات، همکاری بین تیم‌های توزیع‌شده را آسان‌تر می‌کند.
🔹 نگهداری آسان: دیاگرام‌های C4 به‌روزرسانی ساده‌ای دارند و با ابزارهای مختلفی قابل پیاده‌سازی هستند.

کاربردها
مدل C4 در پروژه‌های بزرگ یا تیم‌هایی که نیاز به مستندسازی مداوم دارند، بسیار کاربردی است. این مدل به خصوص در محیط‌های چابک (Agile) که مستندات باید سبک و مؤثر باشند، می‌درخشد. همچنین، برای آموزش اعضای جدید تیم یا ارائه معماری به مشتریان، ابزاری قدرتمند است.

جمع‌بندی
مدل C4 یک ابزار ضروری برای مهندسین نرم‌افزار است که می‌خواهند معماری سیستم را به شکلی شفاف و ساختاریافته ارائه کنند. با استفاده از دیاگرام‌های Context، Container، Component و (در صورت نیاز) Code، این مدل به شما کمک می‌کند تا پیچیدگی‌ها را مدیریت کرده و ارتباطات تیمی را بهبود ببخشید. اگر به دنبال راهی برای ساده‌سازی مستندسازی پروژه‌هایتان هستید، C4 را امتحان کنید!

- انجمن DDD ایران
@DDD_IRAN
وبینار فراتر از کُد: تاملی درباره آنچه که معماری سیستم‌ها را با سازمان سازگار می‌کند.

در این ارایه، امین مصباحی از زمینه‌ها و چرایی ظهور معماری‌های مدرن خواهد گفت و بر مبنای تجربیات خود به این پرسش، پاسخ خواهد داد که شیوه سازماندهی تیم‌ها چگونه بر سازگاری یک رویکرد معماری تاثیرگذار است.

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

درباره امین مصباحی:

Senior Solutions Architect, Engineering Manager

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

زمان: یکشنبه - چهار خرداد - ساعت ۱۹:۳۰
لینک پیوستن:
https://meet.google.com/gyr-xpmr-abk

- انجمن DDD ایران
@DDD_IRAN
انجمن DDD ایران برگزار می‌کند:

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

سخنران:
پویا شهبازیان کار حرفه‌ای خود را از سال ۲۰۰۳ آغاز کرده است و اکنون معمار ارشد راهکارها در شرکت ESW در کشور ایرلند است. این شرکت ارائه دهنده زیرساخت ابری به برندهای مطرحی مانند نایکی برای بخشی از فرآیندهای تجارت الکترونیک آنهاست. پویا در زمان حضور در ایران علاوه بر کار در شرکتهایی مانند افرانت، سپ و ویستا سامانه آسا، مدرس در حوزه طراحی نرم‌افزار و مهندسی نیازمندی‌های نرم‌افزار نیز بوده است. او یکی از نویسندگان کتاب روش کاربردی تحلیل نیازمندی‌های نرم‌افزار است.

زمان: پنج‌شنبه ۲۹ خرداد - ساعت ۱۹ (وقت تهران)

📅 لینک افزودن به تقویم گوگل
🎬 لینک پیوستن به وبینار
@DDD_IRAN
انجمن DDD ایران
وبینار فراتر از کُد: تاملی درباره آنچه که معماری سیستم‌ها را با سازمان سازگار می‌کند. در این ارایه، امین مصباحی از زمینه‌ها و چرایی ظهور معماری‌های مدرن خواهد گفت و بر مبنای تجربیات خود به این پرسش، پاسخ خواهد داد که شیوه سازماندهی تیم‌ها چگونه بر سازگاری…
ویدیوی این وبینار هم اکنون در کانال یوتوب انجمن قابل دسترس است.

🎬 https://youtu.be/2mNUTUr5lqY

همچنین می‌توانید «امین مصباحی» را از طریق کانال تلگرام شخصی ایشان (Tech Afternoon) دنبال کنید.

- انجمن DDD ایران
@DDD_IRAN
HTML Embed Code:
2025/07/04 17:36:02
Back to Top