آموزش عملی و پروژه محور Domain Driven Design و CQRS #11 قسمت یازدهم از یک سری آموزشی از وبسایت پرووید است که در رابطه با Domain Driven Design و CQRS تنظیم شده است. پس از این دوره ی آموزشی می توانید از بسته های آموزشی وبسایت پرووید در رابطه با Domain Driven Design را استفاده کنید.

در قسمت قبلی از این آموزش در مورد فلان صحبت کردیم.

هدف ما این است که اطمینان حاصل کنیم که آیتم ها در Event های به درستی دسته بندی شوند و سفارش هایی که حاوی غذا و یا نوشیدنی خالی هستند Event ی را ایجاد نکنند. همه این سه تست در ابتدا با شکست روبرو خواهند شد. در توضیحات علت شکست گفته می شود که TabAggregate نمی ‌داند چطور TabOpened را اعمال کند.

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

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

حال که ما تست هایی داریم که Event هایی در قسمت Given آنها قرار گرفتند یک تاریخچه از Event ها را در دست داریم. Aggregate مورد نظر ما نقش بسیار مهمی در تبدیل کردن این تاریخچه از Event ها به State فعلی سیستم ایفا می‌کند. این نقش بسیار مهم توسط پیاده سازی اینترفیس جنریک IApplyEvent برای هر کدام از Event های مربوطه انجام می شود. متد Apply در درون این اینترفیس باید State یک Aggregate را بر اساس Event و داده های آن به روز رسانی کند. در این مورد خاص محتوای Event برای ما هیچ اهمیتی ندارد.

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

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

فقط این موضوع که این Event رخ داده است اهمیت دارد. در قسمت بعد پیاده سازی اینترفیس IApplyEvent را برای TabAggregate را مشاهده می کنید.

public class TabAggregate : Aggregate,
IHandleCommand<OpenTab>,
IHandleCommand<PlaceOrder>,
IApplyEvent<TabOpened>
{
    private bool open = false;

    // Command handlers, omitted for brevity

    public void Apply(TabOpened e)
    {
        open = true;
    }
}

با ایجاد این تغییر هنوز هم تست ها با شکست روبرو می شوند اما یک پیام متفاوت نسبت به قبل دریافت می کنیم. پیام مربوط به شکست تست‌ ها می‌ گوید که Event ها مورد انتظار بودند اما TabNotOpen که یک Exception است رخ داده است.

دیدگاهتان را بنویسید

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