معرفی Domain Driven Design
26 مرداد 1401 1401-07-28 11:53معرفی Domain Driven Design
Domain Driven Design یا به اختصار DDD مبحثی است که در سال های اخیر مورد توجه جامعه ی نرم افزاری قرار گرفته و رویکرد بسیاری از شرکت های نرم افزاری را برای تحلیل و توسعه ی نرم افزارها مورد تاثیر قرار داده است.
این مبحث اولین بار در سال ۲۰۰۳ توسط آقای Eric Evans در کتاب Domain Driven Design مطرح گردید.در ادامه این مقاله از تدریس24 همراه ما باشید.
Domain Driven Design چیست؟
DDD Domain Driven Design رویکردی برای تولید و توسعه ی نرم افزارهای بزرگ با فرآیندها و قوانین زیاد، پیچیده و در حال تغییر می باشد. اصطلاح Domain به حوزه و دامنه ی اصلی فعالیت نرم افزار اطلاق می شود که نرم افزار برای پیاده سازی آن توسعه می یابد. هسته ی اصلی DDD مجموعه ای از مفاهیم و تکنیک هاست که برای تحلیل Domain و ساخت یک مدل از روی آن (Domain Model) به کار برده می شود.
تمرکز و توجه اصلی این رویکرد بر روی توسعه ی این مدل می باشد. تحلیل و طراحی Domain Model اختصاصا به منظور تولید نرم افزار در ابعاد Enterprise و با فرآیند های پیچیده و زیاد مناسب می باشد. Domain Model طراحی شده با جزئیات دقیق بوده و مفاهیم و قوانین (Business Rules) در آن پیاده سازی میشوند.
DDD بر زوایای دیگری از فرآیند توسعه ی نرم افزار نیز تاثیر گذار است. برای مثال تاکید زیادی در ارتباط دو طرفه ی تیم توسعه ی نرم افزار و کاربران متخصص Domain (برای مثال انبارداران در سیستم انبار) دارد. از آنجا که ممکن است در این ارتباط دو طرفه، تیم توسعه ی نرم افزار در فهمیدن برخی مفاهیم و مسائل دچار اشتباه و دوگانگی شوند لذا ایجاد زبان یکسان بین دو تیم (Ubiquitous Language) در مورد مفاهیم Domain امری الزامی است
. DDD همچنین راهکارهایی برای تقسیم نرم افزار به بخش های جدا و مستقل (مفهوم Bounded Context) و همچنین ارتباط این بخش ها با یکدیگر ارائه میکند. این امر سبب می شود تا فرآیند توسعه ی نرم افزار به صورت موازی بین چند تیم انجام شده و همچنین معماران سیستم را قادر می سازد تا از معماری ها و تکنولوژی های مختلف در بخش های مختلف استفاده نمایند.
Domain Driven Design همانطور که مطرح شد، رویکرد Domain-Driven برای نرم افزارهای بزرگ و پیچیده مناسب می باشد. لذا استفاده از آن در پروژه های کوچک و ساده و یا پروژه هایی که صرفا نیاز به ذخیره و خواندن اطلاعات دارند و Business خاصی ندارند، ممکن است تنها زمان و هزینه ی پروژه را افزایش داده و مزیتی خاصی به همراه نداشته باشد.

بررسی اجمالی طراحی دامنه محور
Domain Driven Design طراحی دامنه محور تعدادی از مفاهیم و شیوه های سطح بالا را بیان می کند. اهمیت اولیه دامنه است، حوزه موضوعی که کاربر یک برنامه را برای آن اعمال می کند، دامنه نرم افزار است. دامنه یک نرم افزار بر زمینه آن حاکم است، محیطی که در آن یک کلمه یا عبارت ظاهر می شود که معنای آن را تعیین می کند. از این رو، توسعهدهندگان یک مدل دامنه میسازند: سیستمی از انتزاعها که جنبههای انتخابی یک دامنه را توصیف میکند و میتواند برای حل مشکلات مربوط به آن دامنه استفاده شود.
Domain Driven Design هدف این جنبههای طراحی دامنه محور، تقویت زبان فراگیر است، به این معنی که مدل دامنه باید زبان مشترکی را تشکیل دهد که متخصصان دامنه برای توصیف نیازمندیهای سیستم، کاربران تجاری، حامیان مالی و توسعهدهندگان مشترک هستند. در طراحی دامنه محور، لایه دامنه یکی از لایه های رایج در معماری چند لایه شی گرا است.
انواع مدل های قابل تشخیص طراحی دامنه محور
Domain Driven Design طراحی دامنه محور انواع مدل ها را تشخیص می دهد. به عنوان مثال، یک موجودیت یک شی است که نه با ویژگی های آن، بلکه با هویت آن تعریف می شود. به عنوان مثال، اکثر خطوط هوایی یک شماره منحصر به فرد به صندلی های هر پرواز اختصاص می دهند: این هویت صندلی است. در مقابل، یک شیء ارزشی یک شیء تغییرناپذیر است که دارای صفات است اما هویت مفهومی ندارد.
به عنوان مثال، وقتی افراد کارت ویزیت را مبادله می کنند، به جای اینکه سعی کنند بین هر کارت منحصر به فرد تمایز قائل شوند، فقط به اطلاعات روی کارت (ویژگی های آن) اهمیت می دهند. مدل ها همچنین می توانند رویدادها را تعریف کنند (چیزی که اتفاق می افتد). رویداد دامنه رویدادی است که کارشناسان دامنه به آن اهمیت می دهند.
Domain Driven Design مدل ها را می توان توسط یک موجود ریشه به یکدیگر متصل کرد تا به یک مجموعه تبدیل شود. اشیاء خارج از مجموع اجازه دارند ارجاعاتی به ریشه داشته باشند اما به هیچ شیء دیگری از مجموع نمی توانند ارجاع دهند. ریشه کل، سازگاری تغییرات در کل را بررسی می کند. برای مثال، رانندگان مجبور نیستند هر چرخ خودرو را به صورت جداگانه کنترل کنند: آنها به سادگی ماشین را میرانند. در این زمینه، خودرو مجموعه ای از چندین شی دیگر (موتور، ترمز، چراغ های جلو و غیره) است.
کار با مدل ها در طراحی دامنه محور
Domain Driven Design در طراحی دامنه محور، ایجاد یک شی اغلب از خود شی جدا می شود. به عنوان مثال، یک مخزن، یک شی با روش هایی برای بازیابی اشیاء دامنه از یک فروشگاه داده (مانند پایگاه داده) است. به طور مشابه، یک کارخانه یک شی با روش هایی برای ایجاد مستقیم اشیاء دامنه است. هنگامی که بخشی از عملکرد یک برنامه از نظر مفهومی به هیچ شیئی تعلق ندارد، معمولاً به عنوان یک سرویس بیان می شود.
طراحی دامنه محور و ارتباط با ایده های دیگر
اگرچه طراحی دامنه محور ذاتاً با رویکردهای شی گرا مرتبط نیست، اما در عمل از مزایای چنین تکنیک هایی بهره می برد. اینها شامل موجودیتها یا ریشههای مجموع بهعنوان گیرندههای فراخوانی دستورات/روش، کپسولهسازی حالت در ریشههای اصلی و در سطح معماری بالاتر، زمینههای محدود میشود.
Domain Driven Design در نتیجه، طراحی دامنه محور اغلب با اشیاء ساده قدیمی جاوا و اشیاء ساده قدیمی CLR مرتبط است. در حالی که جزئیات پیادهسازی فنی، به ترتیب مختص جاوا و داتنت فریمورک است، این عبارات منعکسکننده دیدگاه رو به رشدی هستند مبنی بر اینکه اشیاء دامنه باید صرفاً با رفتار تجاری دامنه تعریف شوند، نه با چارچوب فناوری خاصتر.
به طور مشابه، الگوی اشیاء برهنه معتقد است که رابط کاربری به سادگی می تواند بازتابی از یک مدل دامنه به اندازه کافی خوب باشد. نیاز به رابط کاربری که بازتاب مستقیم مدل دامنه باشد، طراحی یک مدل دامنه بهتر را مجبور خواهد کرد. طراحی دامنه محور بر سایر رویکردهای توسعه نرم افزار تأثیر گذاشته است.
Domain Driven Design برای مثال، مدلسازی دامنه خاص، طراحی مبتنی بر دامنه است که با زبانهای دامنه خاص اعمال میشود. طراحی دامنه محور به طور خاص به استفاده از یک زبان دامنه خاص نیاز ندارد، اگرچه می تواند برای کمک به تعریف یک زبان خاص دامنه و پشتیبانی از مدل سازی چندگانه دامنه خاص استفاده شود. به نوبه خود، برنامهنویسی جنبهمحور، فاکتورگیری نگرانیهای فنی (مانند امنیت، مدیریت تراکنش، ورود به سیستم) را از یک مدل دامنه آسان میکند و به آنها اجازه میدهد صرفاً روی منطق تجاری تمرکز کنند.
مهندسی و معماری مدل محور
Domain Driven Design در حالی که طراحی دامنه محور با مهندسی و معماری مدل محور سازگار است، هدف پشت این دو مفهوم متفاوت است. معماری مدل محور بیشتر به ترجمه یک مدل به کد برای پلتفرم های فناوری مختلف می پردازد تا تعریف مدل های دامنه بهتر.
Domain Driven Design با این حال، تکنیکهای ارائهشده توسط مهندسی مدل محور (برای مدلسازی دامنهها، ایجاد زبانهای خاص دامنه برای تسهیل ارتباط بین کارشناسان و توسعهدهندگان دامنه،…) طراحی مبتنی بر دامنه را در عمل تسهیل میکند و به متخصصان کمک میکند تا از آنها بهره بیشتری ببرند. مدل ها. به لطف تبدیل مدل مهندسی مدل محور و تکنیک های تولید کد، مدل دامنه می تواند برای تولید سیستم نرم افزاری واقعی که آن را مدیریت می کند استفاده شود.
پست های مرتبط
VDI چیست و چه کاربردی دارد؟
مزایا و معایب اس ام اس مارکتینگ چیست؟
فریم ورک چیست؟
توپولوژی مش چیست؟
دلایل عدم اتصال دامنه جدید به هاست چیست؟
اعضا
-
Active ماه 5, 2 هفته قبل
-
Active ماه 9, 3 هفته قبل
-
Active ماه 9, 3 هفته قبل
-
Active ماه 11 قبل
-
Active 1 سال, ماه 1 قبل
بروز رسانی
سمیرا مردانی's بروزسانی مشخصات انجام شد 1 سال, ماه 6 قبل
محمد جواد محمدی's بروزسانی مشخصات انجام شد 1 سال, ماه 6 قبل
مریم نوری's بروزسانی مشخصات انجام شد 1 سال, ماه 6 قبل
محمد امین طاهری's بروزسانی مشخصات انجام شد 1 سال, ماه 6 قبل
نگار حجتی's بروزسانی مشخصات انجام شد 1 سال, ماه 6 قبل