دسته بندی ها
01:21 1399/10/16

معماری Domain Driven Design چیست ؟ کاربرد معماری Domain Driven Design چیست ؟

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 5746
هوش مصنوعی

پاسخ هوش مصنوعی

معماری Domain Driven Design (DDD) یک رویکرد طراحی نرم افزار است که بر تمرکز بر دامنه و منطق تجاری تمرکز دارد. DDD تلاش می کند تا از طریق همکاری نزدیک میان ذینفعان (مانند توسعه دهندگان و کارشناسان دامنه) یک مدل قوی از دامنه تجاری ایجاد کند. در این معماری، دامنه به عنوان هسته نرم افزار در نظر گرفته می شود و مدل های دامنه می توانند در رسیدن به راه حل های پیچیده و مقیاس پذیر به کار گرفته شوند.

کاربرد اصلی DDD در توسعه نرم افزارهای پیچیده و بزرگ است که نیاز به مدلی واضح و قوی از منطق تجاری دارند. DDD به تیم های توسعه کمک می کند تا درک عمیق تری از نیازهای کسب وکار پیدا کنند و این اطلاعات را در طراحی سیستم ها به کار ببرند. این معماری از الگوهای مختلفی مانند Aggregate, Entity, Value Object و Domain Event بهره می برد.

معماری Domain Driven Design اغلب در پروژه هایی استفاده می شود که:

  • نیاز به یک مدل تجاری قوی و دقیق دارند.
  • حجم داده ها و پیچیدگی های سیستم بالا است.
  • توسعه نرم افزار نیازمند همکاری نزدیک با کارشناسان دامنه است.
  • استفاده از روش های چابک (Agile) و DevOps در مراحل توسعه پروژه برایشان مهم است.
به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 00:24 1399/10/17

معماری Domain Driven Design چیست ؟

معماری Domain Driven Design چیست

 

برای اینکه بدونید معماری Domain Driven Design یا به اختصار DDD چیست در ابتدا بهتر هست که تعریفی از معماری نرم افزار داشته باشم.

 

معماری نرم افزار چیست ؟

هر پروژه ای که انجام می شود نیازمند ساختار خاصی می باشد. مثلا باید مشخص باشد بخش های مختلف نرم افزار چه ارتباطی با هم دارند و چگونه این ارتباطات تعریف شده است. مثلا باید مشخص باشید دیتابیس و کلاسهای داده چگونه با لایه های UI در ارتباط هستند. به طور کلی تعاریف ساختار نرم افزار یا پروژه را معماری نرم افزار می گویند.

 

معماری نرم افزار چه چیزی را مشخص می کند ؟

معماری نرم افزار چیست

 

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

 

چرا نرم افزار باید معماری داشته باشد ؟

دلایل بسیار زیادی وجود دارد که ما باید برای یک نرم افزار از یک معماری خاص استفاده کنیم. برخی از این دلایل عبارتند از :

  1.          شاید بتوان یک پروژه بسیار کوچک را هر طوری که خواستیم انجام دهیم. اما قطعا اگر پروژه فقط یک مقدار بزرگ باشد (فقط کمی بزرگ نه خیلی) در اینجاست که مشکلات بسیار زیادی به وجود خواهد آمد و بهم ریختگی و ناهماهنگی های بسیاری به وجود می آید .(مثال فرض کنید در شرکتی بخواهد یک خودرو را بدون هیچ طرح و برنامه ای تولید کند. آیا امکان پذیر است؟ )
  2.          فهم و درک پروژه آسان تر می شود.
  3.          توسعه پروژه بسیار ساده تر می شود چون جایگاه هر چیزی مشخص می باشد.
  4.          دوباره کاری و تکرار به حداقل می رسد.

 

چگونه معماری مناسب برای پروزه را انتخاب کنیم ؟

نکته بسیار مهمی که باید حتما قبل از شروع یک پروژه به آن توجه کرد این می باشد که حتما بایستی معماری مناسب برای پروژه را به صورت صحیح انتخاب کنید. برای انتخاب معماری به صورت صحیح به موارد زیر توجه کنید :

  • زمان انجام پروژه
  • هزینه انجام پروزه
  • بزرگی و حجم پروژه
  • نیروی کار دخیل در پروژه
  • تشخیص تیم برنامه نویسی

 

انواع معماری های نرم افزار چیست ؟

معماری های زیادی برای نرم افزارها تعریف شده است. برخی از این معماری ها که کاربرد بیشتری دارند عبارتند از :

 

خب تا اینجای کار فهمیدیم معماری نرم افزار چیست ؟ چگونه معماری مناسب برای یک نرم افزار را انتخاب کنیم ؟ انواع معماری نرم افزار کدام است ؟ حالا به موضوع اصلی بپردازیم و ببنیم معماری DDD چیست و کاربرد این معماری کجاست ؟

 

معماری DDD چیست ؟

معماری Domain Driven Design یک معماری بسیار مستحکم و قدرمند نرم افزاری می باشد که برای پروژه هایی با پیچیدگی های فراوان طراحی شده است. در این معماری پایین ترین لایه دیتابیس یا داده نمی باشد. بلکه پایین ترین لایه منطق های اصلی پروژه می باشد.

به عنوان مثال فرض کنید قرار است یک بازی شطرنج را پیاده سازی کنید. در این بازی هر مهره چندین حرکت می تواند انجام دهد و از قواعد خاصی نیز پیروی می شود. ترکیب حرکت مهره ها میلیون ها حرکت را به وجود می آورد. قطعا پیاده سازی میلیون ها حرکت تسط کد غیر ممکن است. بنابراین در اینجا بایستی هر مهره را به عنوان یک Value Object تعریف کرد و رفتار آن را مشخص کرد.

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

 

نکته : معماری DDD بر رفتار شناسی سیستم تاکید دارد. در واقع می توان گفت پیاده سازی این معماری تا حد زیادی به نوع نگرش برنامه نویس به نرم افزار بستگی دارد. فرض کنید در یک سیستم سن کاربر دریافت می شود. برای نگهداری سن کاربر در دیتابیس معمولا یک فیلد از نوع int یا byte در نظر گرفته می شود. اما نکته اینجاست که اگر ما سن کاربر را از نوع int در تعریف کنیم در واقع بازه ای بین -32000 تا + 32000 را داریم (به صورت حدودی) و اگر سن کاربر را در دیتابیس از نوع byte تعریف کنیم در واقع سن می تواند بین 0 تا 255 باشد که در هر دو صورت رفتار سیستم غیر معقول می باشد چون ما هیچ گاه کاربری با سن 500 سال یا -36 سال نداریم. بنابراین می توان گفت شعور سیستم پایین می باشد. در معماری DDD با تعریف قواعدی سیستم باشعور رفتار می کند.

 

کاربرد معماری DDD چیست ؟

برخی از کاربردهای معماری DDD عبارتند از :

  • برای پروزه های خیلی بزرگ با فرآیندهای بسیار بالا و پیچیده و در حال تغییر. (مانند سیستم اداره دادگستری یا سامانه هواشناسی آمریکا)
  • برای پروژه هایی با منطق بسیار پیچیده و شرطهای فراوان (مثلا طراحی بازی شطرنج)

 

مزایا و معایب معماری DDD چیست

  • نکته اول اینکه پیاده سازی کامل و 100 درصدی معماری DDD تقریبا کاری غیر ممکن است و بنا به نیاز پروژه می توان برخی قواعد را در آن رعایت نکرد.
  • همه زبان های برنامه نویسی مثل PHP و یا Asp.net web form توانایی پیاده سازی کامل این معماری را ندارند اما Asp.net Core توانایی پیاده سازی کامل این معماری را دارا می باشد.
  • در معماری DDD لایه Domain داده یا دیتابیس نمی باشد بلکه قواعد تجاری و رفتاری سیستم می باشد.
  • استفاده از معماری DDD حجم کدنویسی را بشدت افزایش می دهد. همچنین زمان انجام پروژه نیز افزایش قابل ملاحظه ای خواهد داشت. بنابراین در استفاده از این معماری دقت داشته باشید.
  • نیازی نیست که تمام پروژه با این معماری پیاده سازی شود. شما میتوانید بخش هایی از پروزه که دارای قواعد پیچیده می باشد با  این معماری پیاده سازی کنید.
  • در پروژه های بسیار بزرگ یا روابط پیچیده راهی جز استفاده از این معماری وجود ندارد.

 

در این آموزش (اتوماسیون اداری تحت وب) معماری DDD به صورت محدود پیاده سازی شده است. همچنین فیلم زیر هم در مورد انواع معماری ها می باشد که توصیه می کنم ببینید.

 

 

ویرایش شده در چهارشنبه 17 دی 1399 ساعت 00:24:35
به این پاسخ امتیاز بدهید    2
امتیاز: 1635 رتبه: 2
1 نظر
naserzade : سلام و خسته نباشید. توضیحات خیلی عالی بود ممنونم از شما. خدا خیرتون بده

امتیاز کاربر : 20   رتبه کاربر : 36   تاریخ ثبت : 09:16 1402/01/15
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود