PDA

View Full Version : آموزش: معماری Domain-Driven را بر روی بستر .Net تجربه کنید. بخش 1



مهران موسوی
سه شنبه 29 تیر 1395, 20:10 عصر
- بخش 1 / مقدمه

Domain Driven Design (به اختصار DDD) مبحثی است که در سال های اخیر به شدت مورد توجه جامعه ی نرم افزاری دنیا بوده و رویکرد بسیاری از شرکت های نرم افزاری را برای تحلیل و توسعه ی نرم افزارها به شدت مورد تاثیر قرار داده است. این مبحث اولین بار در سال ۲۰۰۳ توسط آقای Eric Evans در کتاب Domain-driven design مطرح گردید.

- Domain-Driven Design چیست؟

DDD رویکردی برای تولید و توسعه ی نرم افزارهای بزرگ با فرآیندها و قوانین زیاد، پیچیده و در حال تغییر می باشد. اصطلاح Domain به حوزه و دامنه ی اصلی فعالیت نرم افزار اطلاق می شود که نرم افزار برای پیاده سازی آن توسعه می یابد. هسته ی اصلی DDD مجموعه ای از مفاهیم و تکنیک هاست که برای تحلیل Domain و ساخت یک مدل از روی آن (Domain Model) به کار برده می شود. تمرکز و توجه اصلی این رویکرد بر روی توسعه ی این مدل می باشد. تحلیل و طراحی Domain Model اختصاصا به منظور تولید نرم افزار در ابعاد Enterprise و با فرآیند های پیچیده و زیاد مناسب می باشد. Domain Model طراحی شده با جزئیات دقیق بوده و مفاهیم و قوانین (Business Rules) در آن پیاده سازی میشوند.
DDD بر زوایای دیگری از فرآیند توسعه ی نرم افزار نیز تاثیر گذار است. برای مثال تاکید زیادی در ارتباط دو طرفه ی تیم توسعه ی نرم افزار و کاربران متخصص Domain (برای مثال انبارداران در سیستم انبار) دارد. از آنجا که ممکن است در این ارتباط دو طرفه، تیم توسعه ی نرم افزار در فهمیدن برخی مفاهیم و مسائل دچار اشتباه و دوگانگی شوند لذا ایجاد زبان یکسان بین دو تیم (Ubiquitous Language) در مورد مفاهیم Domain امری الزامی است. DDD همچنین راهکارهایی برای تقسیم نرم افزار به بخش های جدا و مستقل (مفهوم Bounded Context) و همچنین ارتباط این بخش ها با یکدیگر ارائه میکند. این امر سبب می شود تا فرآیند توسعه ی نرم افزار به صورت موازی بین چند تیم انجام شده و همچنین معماران سیستم را قادر می سازد تا از معماری ها و تکنولوژی های مختلف در بخش های مختلف استفاده نمایند.
همانطور که مطرح شد، رویکرد Domain-Driven برای نرم افزارهای بزرگ و پیچیده مناسب می باشد. لذا استفاده از آن در پروژه های کوچک و ساده و یا پروژه هایی که صرفا نیاز به ذخیره و خواندن اطلاعات دارند و Business خاصی ندارند، ممکن است تنها زمان و هزینه ی پروژه را افزایش داده و مزیتی خاصی به همراه نداشته باشد.

- مفهوم Domain Model

در اغلب پروژه های نرم افزاری، دغدغه ی اصلی تیم توسعه، طراحی دقیق و درست فرآیند ها و قوانین نرم افزار می باشد. زمان و هزینه ای که صرف تحلیل، پیاده سازی و تست فرآیندها و Business نرم افزار می شود بسیار بیشتر از زمان و هزینه ای است که صرف موارد فنی و زیر ساخت نرم افزاری می شود. تیم توسعه ی نرم افزار می تواند با تمرکز بر روی Domain و طراحی مدل (Domain Model) از روی آن و همچنین با رعایت مفاهیم و تکنیک های DDD از پیاده سازی درست این فرآیندها اطمینان پیدا می کنند.
Domain Model مدلی انتزاعی از دامنه ی فعالیت نرم افزار است که توسط تیم توسعه ی نرم افزار در قالب یک مدل شی گراء طراحی می شود. این مدل ممکن است در طول زمان و با تغییر فرآیند ها تغییر یافته و تکمیل شود. Domain Model تنها یک ساختار داده ای نبوده و مجموعه ای از داده ها، رفتارها و قوانین (Business Rule) می باشد. از آنجا که مهم ترین چیز در طراحی Domain Model اطمینان از صحت فرآیند ها و Business نرم افزار می باشد، لذا هنگام طراحی از پرداختن به دغدغه ها و نکات فنی زیر ساختی و دیتابیسی خودداری می شود (مفهوم Persistence Ignorance).
اکثر مباحث مطرح شده در DDD در راستای تحلیل و توسعه ی Domain Model می باشد که در قالب مفاهیمی مانند Entity، Aggregates، Value Object و … پیاده سازی می شود. در مطالب بعدی به بررسی این مفاهیم و تکنیک ها خواهیم پرداخت.
ادامه در بخش بعد ...

هر گونه سوال یا ابهام را همینجا مطرح کنید.

جهت آشنایی بیشتر با بنده میتوانید به پروفایل linked-in بنده مراجعه نمائید
https://www.linkedin.com/in/mehran-mousavi