
آموزش پیاده سازی الگوی Specification در Domain Driven Design
آموزش پیاده سازی الگوی Specification در Domain Driven Design یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی الگوی Specification در سی شارپ است که با نام اصلی Specification Pattern in C# از شرکت Pluralsight منتشر شده است.
Domain Driven Design چیست؟
طراحی دامنه محور یا همان Domain Driven Design در واقع درک نیازهای واقعی کسب و کار مشتری است. ما باید درباره دامنه های مختلف مانند بانکداری، مخابرات، زنجیره تامین، مراقبت های بهداشتی و... دانش داشته باشیم. بنابراین در اینجا دامنه به معنی دانش کسب و کار درباره صنعت خاص است. به طور مشابه طراحی دامنه محور تمرکز بیشتری نسبت به نیازهای کسب و کار دارد نه به تکنولوژی. برای شروع نوشتن یک سیستم، باید بدانیم که مشتری چه چیزی را مد نظر دارد، در حین فاز اولیه هیچگاه درباره برنامه نویسی و معماری آن فکر نمی کنید. هدف اصلی شما درک تمام شرایط کسب و کار مشتری و چگونگی مدل دامنه مورد نیاز او است.

بنابراین چیزی که ما به دنبال آن هستیم بحث با مشتری درباره نیازهای کسب و کار او است. Domain Driven Design صرفا بر اساس این فرضیات برای ترسیم کردن نیازهای کسب و کار در مدل دامنه است. طراحی دامنه محور همه چیز درباره چگونگی طراحی مدل دامنه شماست. به این معنا که هر کلاس دامنه باید یک رابطه مستقیم با آنچه که در دامنه کسب و کار است داشته باشد.
Specification Pattern چیست؟
یکی از الگوهای Domain Driven Design که بسیار پرکاربرد نیز می باشد Specification Pattern نام دارد. به طور ساده Specification Pattern به Encapsulate کردن یک Domain Knowledge در درون یک واحد تک (برای مثال یک کلاس) به ما کمک می کند.

نام این واحد تک یا اصطلاحاً Single Unit را Specification می گوییم. این Specification قابلیت استفاده مجدد یا همان Reuse شدن در قسمت های مختلف برنامه را دارد. به طور کلی استفاده از Specification Pattern سه کاربرد اساسی دارد که عبارت اند از:
- بازیابی داده ها یا Data Retrieval
- اعتبارسنجی درون حافظه ای یا In-memory Validation
- ساخت اشیا جدید یا Construction-to-Order
جداسازی شروط جستوجو و خرید با Specification در C#
در برنامههایی که قابلیت جستوجو و خرید دارند، شروط کسبوکار ممکن است بهمرور پیچیده شوند و در چند نقطه از کد تکرار شوند. آموزش Specification Pattern in C# از پیادهسازی ابتدایی این الگو شروع میکند و سپس نیازمندیهای جدیدی برای Search و Purchase به نمونه برنامه اضافه میکند. این روند نشان میدهد چگونه میتوان یک شرط یا مجموعهای از شروط را در قالب یک Specification مستقل بیان کرد و آن را در موقعیتهای مختلف به کار گرفت. چنین ساختاری به خوانایی منطق دامنه کمک میکند و تغییر قواعد را از پراکندگی شرطها در کد کاهش میدهد.
در این رویکرد، Specification تنها یک کلاس شامل شرطهای ساده نیست؛ نحوه ترکیب آن با پرسوجوهای داده نیز اهمیت دارد. آموزش به نحوه کار LINQ و استفاده از Expressionهای ساده در C# میپردازد تا ارتباط میان شرطهای برنامه و عبارتهای قابلتحلیل برای اجرای پرسوجو روشن شود. با درک این سازوکار میتوانید منطق جستوجو را به شکل قابلاستفاده مجدد طراحی کنید و به جای تکرار شرطها در بخشهای مختلف، آنها را در ساختارهای مشخص نگه دارید. این موضوع برای سامانههایی که قواعد فیلترکردن یا واجد شرایط بودن عملیات در آنها تغییر میکند، کاربرد دارد.
ساخت Generic Specification و کپسولهسازی منطق Repository
پس از پیادهسازی اولیه، این آموزش به ریفکتور کردن و افزایش Encapsulation میپردازد. یکی از محورهای آن Generic Specification است که امکان تعریف ساختارهای عمومیتر برای شروط را فراهم میکند و از وابستگی غیرضروری به یک نوع مشخص میکاهد. همچنین Specificationهای Strongly Typed بررسی میشوند تا ارتباط نوع داده و شرطهای تعریفشده صریحتر باشد. این مفاهیم در طراحی لایه دامنه مفیدند، زیرا به توسعهدهنده کمک میکنند منطق شروط را از جزئیات مصرف آن جدا کند و در عین حال، بررسی نوع دادهها را در زمان کامپایل حفظ کند.
بخش دیگری از آموزش به بازگرداندن IQueryable از درون Repository اختصاص دارد. شناخت این موضوع مهم است، زیرا IQueryable امکان ساخت پرسوجوهایی را فراهم میکند که اجرای آنها میتواند به مرحلهای بعد موکول شود؛ در نتیجه، نحوه ترکیب شرطها و محل اجرای پرسوجو بر رفتار برنامه اثر میگذارد. در کنار این بحث، استفاده از Expressionها به درک نحوه تبدیل شروط به ساختارهایی که ابزارهای پرسوجو میتوانند تحلیل کنند، کمک میکند. این آموزش برای توسعهدهندگان C# آشنا با LINQ و الگوهای دامنه مناسب است که میخواهند منطق جستوجو و قواعد کسبوکار را بهتر کپسوله کنند.
سرفصل مطالب آموزش ویدئویی پیاده سازی الگوی Specification در Domain Driven Design
فصل اول: مقدمه ی دوره ی آموزشی
- مقدمه
فصل دوم: مقدمه ای بر Specification Pattern
- شروع به کار
- Specification Pattern چیست؟
- معرفی پروژه ی این بسته ی آموزشی
- اضافه کردن نیازمندی جدید برای گزینه های Search
- اضافه کردن نیازمندی جدید برای گزینه های Purchase
- بررسی کد
- چمع بندی
فصل سوم: پیاده سازی ابتدایی Specification Pattern
- مقدمه
- دستورات LINQ چگونه کار می کنند؟
- استفاده از Expression های ساده در سی شارپ
- بررسی روش استفاده از Expression های ساده در سی شارپ
- استفاده از Generic Specifications
- بررسی روش استفاده از Generic Specifications
- Return کردن IQueryable از درون Repository
- جمع بندی
فصل چهارم: ریفکتور کردن و Encapsulation بالاتر
- مقدمه
- بررسی Specification های Strongly Typed
- نکات مربوط به پیاده سازی Specification Pattern
- ترکیب کردن Specification ها
- بررسی روش ترکیب کردن Specification ها
- چه زمان از Specification ها استفاده نکنیم
- ترکیب کردن Specification ها با Filtration های معمولی
- کار کردن با چندین کلاس
- بررسی روش کار کردن با چندین کلاس
- ساختن اشیا جدید با Specification Pattern
- جمع نبدی
- لیست منابع
- جمع بندی بسته ی آموزش







