Domain driven design یا DDD چیست؟
طراحی دامنه محور (DDD) یک رویکرد طراحی نرمافزار است که بر مدل سازی نرمافزار برای مطابقت با یک دامنه با توجه به ورودی کارشناسان آن دامنه تمرکز دارد. از نظر برنامه نویسی شی گرا به این معنی است که ساختار و زبان کد نرمافزار (نام کلاسها، روشهای کلاس، متغیرهای کلاس) باید با دامنه تجاری مطابقت پیدا کند. به عنوان مثال، اگر نرمافزاری برنامههای وام را پردازش کند، ممکن است کلاسهایی مانند LoanApplication و Customer و روشهایی مانند AcceptOffer و Withdraw داشت. DDD پیاده سازی را به یک مدل در حال تکامل متصل میکند. طراحی دامنه محور بر روی اهداف زیر پیش بینی شده است:
- قرار دادن تمرکز اولیه پروژه بر روی حوزه اصلی و منطق دامنه.
- پایه گذاری طرحهای پیچیده بر روی مدلی از دامنه.
- آغاز یک همکاری خلاقانه بین متخصصان فنی و حوزه برای اصلاح مکرر یک مدل مفهومی که به مشکلات حوزه خاصی میپردازد.
انتقادات از طراحی دامنه محور استدلال میکند که توسعه دهندگان معمولاً باید مقدار زیادی از انزوا و کپسوله سازی را برای حفظ مدل به عنوان یک ساختار خالص و مفید اجرا کنند. در حالی که طراحی دامنه محور مزایایی مانند قابلیت نگهداری را فراهم میکند، مایکروسافت آن را فقط برای دامنههای پیچیدهای که مدل مزایای واضحی در فرمول بندی درک مشترک از دامنه ارائه میدهد، توصیه میکند. این اصطلاح توسط اریک ایوانز در کتاب خود با همین عنوان که در سال 2003 منتشر شد، ابداع شد.
Domain driven design یا DDD چیست؟
بررسی اجمالی طراحی دامنه محور
طراحی دامنه محور تعدادی از مفاهیم و شیوههای سطح بالا را بیان میکند. اهمیت اولیه دامنه است، حوزه موضوعی که کاربر یک برنامه را برای آن اعمال میکند، دامنه نرمافزار است. دامنه یک نرمافزار بر زمینه آن حاکم است، محیطی که در آن یک کلمه یا عبارت ظاهر میشود که معنای آن را تعیین میکند. از این رو، توسعهدهندگان یک مدل دامنه میسازند: سیستمی از انتزاعها که جنبههای انتخابی یک دامنه را توصیف میکند و میتواند برای حل مشکلات مربوط به آن دامنه استفاده شود. هدف این جنبههای طراحی دامنه محور، تقویت زبان فراگیر است، به این معنی که مدل دامنه باید زبان مشترکی را تشکیل دهد که متخصصان دامنه برای توصیف نیازمندیهای سیستم، کاربران تجاری، حامیان مالی و توسعهدهندگان مشترک هستند. در طراحی دامنه محور، لایه دامنه یکی از لایههای رایج در معماری چند لایه شی گرا است.
انواع مدلهای قابل تشخیص طراحی دامنه محور
طراحی دامنه محور انواع مدلها را تشخیص میدهد. به عنوان مثال، یک موجودیت یک شی است که نه با ویژگیهای آن، بلکه با هویت آن تعریف میشود. به عنوان مثال، اکثر خطوط هوایی یک شماره منحصر به فرد به صندلیهای هر پرواز اختصاص میدهند: این هویت صندلی است. در مقابل، یک شیء ارزشی یک شیء تغییرناپذیر است که دارای صفات است اما هویت مفهومی ندارد. به عنوان مثال، وقتی افراد کارت ویزیت را مبادله میکنند، به جای اینکه سعی کنند بین هر کارت منحصر به فرد تمایز قائل شوند، فقط به اطلاعات روی کارت (ویژگیهای آن) اهمیت میدهند. مدلها همچنین میتوانند رویدادها را تعریف کنند (چیزی که اتفاق میافتد). رویداد دامنه رویدادی است که کارشناسان دامنه به آن اهمیت میدهند. مدلها را میتوان توسط یک موجود ریشه به یکدیگر متصل کرد تا به یک مجموعه تبدیل شود. اشیاء خارج از مجموع اجازه دارند ارجاعاتی به ریشه داشته، اما به هیچ شیء دیگری از مجموع نمیتوانند ارجاع دهند. ریشه کل، سازگاری تغییرات در کل را بررسی میکند. برای مثال، رانندگان مجبور نیستند هر چرخ خودرو را به صورت جداگانه کنترل کنند: آنها به سادگی ماشین را میرانند. در این زمینه، خودرو مجموعهای از چندین شی دیگر (موتور، ترمز، چراغهای جلو و غیره) است.
کار با مدلها در طراحی دامنه محور
در طراحی دامنه محور، ایجاد یک شی اغلب از خود شی جدا میشود. به عنوان مثال، یک مخزن، یک شی با روشهایی برای بازیابی اشیاء دامنه از یک فروشگاه داده (مانند پایگاه داده) است. به طور مشابه، یک کارخانه یک شی با روشهایی برای ایجاد مستقیم اشیاء دامنه است. هنگامی که بخشی از عملکرد یک برنامه از نظر مفهومی به هیچ شیئی تعلق ندارد، معمولاً به عنوان یک سرویس بیان میشود.
طراحی دامنه محور و ارتباط با ایدههای دیگر
اگرچه طراحی دامنه محور ذاتاً با رویکردهای شی گرا مرتبط نیست، اما در عمل از مزایای چنین تکنیکهایی بهره میبرد. اینها شامل موجودیتها یا ریشههای مجموع بهعنوان گیرندههای فراخوانی دستورات/روش، کپسولهسازی حالت در ریشههای اصلی و در سطح معماری بالاتر، زمینههای محدود میشود. در نتیجه، طراحی دامنه محور اغلب با اشیاء ساده قدیمی جاوا و اشیاء ساده قدیمی CLR مرتبط است. در حالی که جزئیات پیادهسازی فنی، به ترتیب مختص جاوا و داتنت فریمورک است، این عبارات منعکسکننده دیدگاه رو به رشدی هستند مبنی بر اینکه اشیاء دامنه باید صرفاً با رفتار تجاری دامنه تعریف شوند، نه با چارچوب فناوری خاصتر. به طور مشابه، الگوی اشیاء برهنه معتقد است که رابط کاربری به سادگی میتواند بازتابی از یک مدل دامنه به اندازه کافی خوب است. نیاز به رابط کاربری که بازتاب مستقیم مدل دامنه شود، طراحی یک مدل دامنه بهتر را مجبور خواهد کرد. طراحی دامنه محور بر سایر رویکردهای توسعه نرمافزار تأثیر گذاشته است. برای مثال، مدلسازی دامنه خاص، طراحی مبتنی بر دامنه است که با زبانهای دامنه خاص اعمال میشود. طراحی دامنه محور به طور خاص به استفاده از یک زبان دامنه خاص نیاز ندارد، اگرچه میتواند برای کمک به تعریف یک زبان خاص دامنه و پشتیبانی از مدل سازی چندگانه دامنه خاص استفاده شود. به نوبه خود، برنامهنویسی جنبهمحور، فاکتورگیری نگرانیهای فنی (مانند امنیت، مدیریت تراکنش، ورود به سیستم) را از یک مدل دامنه آسان میکند و به آنها اجازه میدهد صرفاً روی منطق تجاری تمرکز کنند.
مهندسی و معماری مدل محور
در حالی که طراحی دامنه محور با مهندسی و معماری مدل محور سازگار است، هدف پشت این دو مفهوم متفاوت است. معماری مدل محور بیشتر به ترجمه یک مدل به کد برای پلتفرمهای فناوری مختلف میپردازد تا تعریف مدلهای دامنه بهتر. با این حال، تکنیکهای ارائهشده توسط مهندسی مدل محور (برای مدلسازی دامنهها، ایجاد زبانهای خاص دامنه برای تسهیل ارتباط بین کارشناسان و توسعهدهندگان دامنه،…) طراحی مبتنی بر دامنه را در عمل تسهیل میکند و به متخصصان کمک میکند تا از آنها بهره بیشتری ببرند. مدلها. به لطف تبدیل مدل مهندسی مدل محور و تکنیکهای تولید کد، مدل دامنه میتواند برای تولید سیستم نرمافزاری واقعی که آن را مدیریت میکند استفاده شود.
ارسال پاسخ