شماره تماس 09336863931 | 09178169907 پست الکترونیک provid.ir@gmail.com

ایجاد اشیا با روش های برتر در Domain Driven Design #2

مقاله ی ایجاد اشیا با روش های برتر در Domain Driven Design را در این قسمت از وبسایت آموزش برنامه نویسی پرووید به شما تقدیم می کنیم.

ایجاد اشیا با روش های برتر در Domain Driven Design #2

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

برای مثال در این مقاله من از یک Object با نام SalesOrder استفاده کردم که در دومین صدور قبض یا همان Billing در یک کمپانی مطرح می شود. در این مقاله من شروع به پر کردن جزئیات SalesOrder می کنم به نحوی که قوانین Aggregate ها در Domain Driven Design نقض نشوند.

بسته ی آموزش کاربردی طراحی نرم افزار Domain Driven Design

از شما دعوت می کنیم از بسته ی آموزش کاربردی طراحی نرم افزار Domain Driven Design دیدن کنید.

بسته ی آموزش اصول طراحی نرم افزار Domain Driven Design

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

افزودن Object های بیشتر

در برنامه من یک SalesOrder شبیه یک DTO عمل می کند و حاوی Object های مرتبط با هم هستند. یک آبجکت از نوع Customer به منظور مشخص کردن مشتری مرتبط با آن SalesOrder یک کالکشن از کلاس SalesOrderDetail که حاوی آیتم هایی هست که در آن SalesOrder سفارش داده شده اند و یک کالکشن از کلاس SalesOrderAdjustments که حاوی اطلاعاتی در رابطه با تخفیف هایی هست که می توانند دارد بر روی SalesOrder انجام شوند. با توجه به این موارد می توان کلاس SalesOrder را به شکل زیر تعریف کرد.

Public Class SalesOrder
  Public Property Id As String
  Public Property CustomerOwner As Customer
  Public Property Details As List(of SalesOrderDetails)
  Public Property Adjustments As List(of SalesOrderAdjustments)
End Class

از نقطه ‌نظر Domain Driven Design کلاس SalesOrder یک Aggregate Root هست که از اشیای Customer و SalesOrderDetail و SalesOrderAdjustments تشکیل شده است. برای دسترسی پیدا کردن به اشیایی که درون این Aggregate می باشند فقط می‌توان از طریق Aggregate Root آن یعنی SalesOrder اقدام کرد.

دقت کنید که نمی‌توانیم هر کالکشنی از اشیا را یک Aggregate بدانیم چون تمامی کالکشن ها یک Aggregate Root ندارند و داشتن یک Aggregate Root برای یک Aggregate الزامی است. برای مثال برنامه نویسان در ASP.NET MVC اغلب لیستی از اشیا را به یک View ارسال می‌کنند اما یک لیست را نمی‌توان یک Aggregate دانست چون (علاوه بر موضوعاتی که اینجا به آنها اشاره نمی‌شود) یک لیست حاوی یک Aggregate Root نیست.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *