ПредишенСледващото

Ние продължаваме да се потопите в проектирането и разработването. В последната статия за проектиране на лица домейни писахме пълен Служител домейн лице единица със собствен бизнес логика, за да опише средствата за персонал. Сега ние трябва да по някакъв начин се работи с него от контролера, се съхраняват в база данни и да се върнат. Но нашият служител не съдържа един ред в базата данни, така че той не може да бъде спасен. Какво да се прави?

Обикновено в този случай се създава външна съоръжението за съхранение (хранилище), който ще работи около юридически лица, като методите за съхранение:

И това може да се използва EmployeeRepository на точното място за нас. Така например, в службите за кандидатстване. Какви услуги и какво правят?

на услуги за приложения

Целият код се съхранява в неудобните на контролера. Причините за това трябва да звучат по-долу. Вместо това, там е популярна практика в тесните кръгове на кода с логиката на контролера, за да се извлече в отделни класове, наречена услуги на ниво приложение (или приложни услуги) и на контролните органи трябва да се отнасят към тях. Особено ние не отидем в терминологията, и просто да видите какво е то.

В нашия случай, да общуват с контролери браузър или API, ние се нуждаем EmployeeService приложение за услуга. че използването на EmployeeRepository управител на магазин и събитие EventDispatcher ще извършва всички операции с вещество служител:

Ние може да предава на голям брой параметри за всеки от тях:

Но за да се избегне объркване в техния ред и броят на тези набори сме събрани в отделна структура на въведените данни (Data Transfer Object) като AddressDto:

След Zen познания по обектно-ориентиран интензивното, много иска да направи нещо по-съществено върху Yii2 рамка, да се прилагат новите знания в практиката. И дори в този форум каза, че ме чака в рамките на курса. Както обещах в блога, скоро ще започне голяма мулти-еднодневен семинар на тема развитието на онлайн магазин за Yii2 използват най-добрите практики.

Така че, нека да продължим! Ние вече сме научили малко на същността на дизайна в първата част, а дори и подготвени малка услуга приложение във втория. И ние се съгласихме, че структурите ние съхранение домейни в базата данни, за да направи хранилище. И дори да го направи тест емулатор и подготви изпълнението на тестовете. Преди да прочетете някоя готови решения днес navelosipedim собствено хранилище изпълнение без да се използват системите за ORM страни.

Някои хора понякога се чудят как е възможно да се програмира рамки, без да използвате ActiveRecord и CRUD и защо такава "лесна" на лицевата страна на директна работа с полета в базата данни не обичам труда-ООП-Schnick. И много молим тестове трябва да се изследват, и това не е необходимо. И ако трябва да проверите частни методи, или не? Ние ще разберем тези въпроси.

Webinar-скрийнкаст за сравняване процедури дистанционно кол протоколи RPC, достъп до сапун и REST архитектура обекти за прилагане на API за работа със сайта. Ние смята писането на API за RESTful проект Yii2 рамка и нейното тестване с помощта Codeception.

Но какво, ако такива неща

Контрольори потрепване само EmployeeService. Той е с нас и представлява набор от плъзгачи случаи, които вече работят лица. Директно към същността на контролера няма достъп.

Благодаря. С удоволствие прекарах половин час от живота си четене вашата статия.
Очаквам с нетърпение продължението!

Само няколко въпроса:

1. Dto обекти имат право да направи публично поле? Това не е ли нарушение на капсулиране?

2. Ако има няколко метода за обслужване, например, описани от вас UserService. В някои методи нужда passwordHasher, в други не. Оказва се, че, за да се позове на метод, който changeEmail ние все още трябва да се премине към passwordHasher на конструктор обект, който в този случай ние не се нуждаем. Какво обикновено се прави в такива случаи? Service е разделена на няколко части? Или е използван така?

1. DTO - структурата на данните (замяна асоциативен масив), вместо пълно обект.

2. CQRS подход към Command автобус за всеки отбор (DTO) е написана в същия клас манипулатор. Например, за ProductCreateCommand екип е ProductCreateHandler и контролер на всички отбор хвърля в автобуса, както тук и тук. Спечелете повече код, но без допълнително съоръжения inektyatsya. Така че или разделена на няколко части, или не се грижи за допълнителна памет за polkilobayta PasswordHasher.

А там, където можете да добавите сделка? Може би в контролера, че нещо подобно?

Подкрепете проекта - споделете линка, благодаря!