Найдено 47 результатов

glagola
2017.04.18, 23:56
Форум: Архитектура, дизайн, ООП
Тема: DI в DDD проектах
Ответы: 30
Просмотры: 11978

Re: DI в DDD проектах

samdark писал(а): 2017.04.18, 20:07 Возможно. Но в 2.0 сделать нельзя — обратная совместимость. Закиньте в issue tracker.
https://github.com/yiisoft/yii2/issues/14006 В английском не силен, но надеюсь что суть удалось передать :D
glagola
2017.04.18, 23:44
Форум: Архитектура, дизайн, ООП
Тема: DI в DDD проектах
Ответы: 30
Просмотры: 11978

Re: DI в DDD проектах

создай внутримодульный реестр сервисов, который регистрируется в yii оберткой, которая автоматически делает синглтон. Что-то типа сервис провайдеров https://github.com/container-interop/service-provider Предложенный подход "облегчит" страдания, но не вылечит болезнь. Основная проблема - &...
glagola
2017.04.18, 14:44
Форум: Архитектура, дизайн, ООП
Тема: DI в DDD проектах
Ответы: 30
Просмотры: 11978

DI в DDD проектах

Всем привет, хотел бы затронуть тему Di контейнеров для проектов реализованных по DDD. Дело в том что, в моем текущем проекте (я думаю, что такая проблема во всех проектах) все сервисы/валидаторы/репозитории и т.д. инжектятся друг в друга и все они не обладают состоянием (или если и обладают, то явл...
glagola
2017.04.11, 21:39
Форум: Архитектура, дизайн, ООП
Тема: Проектирование сущностей, сервисов и репозиториев
Ответы: 108
Просмотры: 49852

Re: Проектирование сущностей, сервисов и репозиториев

А в консольной конфигурации компонент 'db' настроен? Не думаю что это имеет отношение к делу (другое дело если бы контейнер вернул не инициализированный инстанс Connect), но, в любом случае, если вы имеете ввиду, настроено ли подключение к БД - да у него рабочая конфигурация. Вот так работает: \Yii...
glagola
2017.04.11, 19:14
Форум: Архитектура, дизайн, ООП
Тема: Проектирование сущностей, сервисов и репозиториев
Ответы: 108
Просмотры: 49852

Re: Проектирование сущностей, сервисов и репозиториев

Цитата из статьи про репозитории : Контейнер Yii написан так, что Instance::of может принимать не только имена элементов контейнера, но и сервис-локатора Yii::$app, поэтому мы можем указать напрямую Instance::of('db') и он поймёт, что мы от него хотим именно объект Yii::$app->db Я, когда это увидел,...
glagola
2017.04.08, 14:53
Форум: Архитектура, дизайн, ООП
Тема: Проектирование сущностей, сервисов и репозиториев
Ответы: 108
Просмотры: 49852

Re: Проектирование сущностей, сервисов и репозиториев

Я DDD увлекся иключительно благодаря данному форуму! А теперь есть еще и детальные статьи раскрывающие тему, спасибо вам! Вот из моей небольшой практики, относительно методов add и save из вашей статьи: interface EmployeeRepository { .... /** * @param Employee $employee */ public function add(Employ...
glagola
2017.04.06, 14:15
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

Re: А что вы делаете с дублированием кода в Application Service?

Я бы посоветовал отказаться от методов которые возвращают не явные данные Что значит "не явные"? Чтобы не быть голословным, вот пример сигнатуры метода из интерфейса: interface IUserRepository { // ... public function ofId(UserId $id): ?User; } Данная сигнатура, жестко регламентирует возв...
glagola
2017.04.06, 11:26
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

Ну там временное окно должно быть. Да, окно есть - 1 час. И воркер должен пытаться несколько раз. Даже если он будет пытаться несколько раз, то не факт что он преуспеет. В этом случае и кроется загвоздка. Я понимаю, что данный случай крайне редок, но чем больше пользователей тем больше вероятность ...
glagola
2017.04.06, 11:16
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

Re: А что вы делаете с дублированием кода в Application Service?

Я привел пример с часто существующем "getById" (ну или как кому нравится называть это метод), который по условиям интерфейса должен вернуть юзера по ИД или бросить исключение об его отсутствии. Все это интерфейс диктуемый доменом. Если тебя смущает что исключения прописаны в доке и из наз...
glagola
2017.04.05, 19:08
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

Re: А что вы делаете с дублированием кода в Application Service?

slavcodev писал(а): 2017.04.05, 16:53 Репозиторий это домен
Поправьте если не прав, но интерфейс репозитория - домен. Реализация репозитория ничем не обязана домену, кроме как реализовывать данный интерфейс.
glagola
2017.04.05, 16:17
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

Событие можете записать в БД в первой транзакции. Потом в каком-нибуль воркере его обработать - выставить изображениям нужный статус, удалить/пометить событие как обработанное. Не уверен, что так это будет работать. Дело в том что сейчас связь односторонняя, если по какой-то причине воркер не сможе...
glagola
2017.04.05, 13:33
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

Re: А что вы делаете с дублированием кода в Application Service?

Или можно во всех сервисах у репозитория запросить "незабанненого" юзера по ИД и в репозитории кидать оба исключения по необходимости. А факт генерации исключения UserBanned из репозитория не будет являться "протеканием" бизнес логики в инфраструктуру? Я в том смысле, что если р...
glagola
2017.04.05, 13:28
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

Подождите, у вас события персистентны? Если нет, при таком подходе можт возникнуть неконсистентность между коллекцией идентификаторов и изображениями. Консистентность должна быть обязательно. Нет, события не персистентны. Тут либо событие в одной транзакции с объявлением сохранять, либо изображения...
glagola
2017.04.05, 00:01
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

Re: А что вы делаете с дублированием кода в Application Service?

ну это не совсем дублирование - это необходимые для кейса действия. Согласен, не совсем дублирование, но решение оказалось аналогичным решению проблемы дублирования кода. я тоже бы вынес в сервис-фетчер Благодарю за то, что напомнили про термин "fetcher" - переименовал свой сервис :)
glagola
2017.04.04, 20:41
Форум: Архитектура, дизайн, ООП
Тема: А что вы делаете с дублированием кода в Application Service?
Ответы: 19
Просмотры: 6704

А что вы делаете с дублированием кода в Application Service?

Через какое-то время начал замечать, что постоянно пишу однотипный код при создании Application services. Чтобы не быть голословным приведу пример из текущего проекта. Прежде чем начинать работать с каким-то пользователем в рамках Application service: Достать его из репозитория, если не найден - кин...
glagola
2017.04.04, 20:02
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

zelenin писал(а): 2017.04.04, 15:56 Только в разных транзакциях надо обрабатывать.
Правильно ли я понимаю, что статус каждого изображения (новое/удаленное) должен быть изменен в отдельной транзакции? или можно все удаленные изображения пометить как expired в рамках одной транзакции?
glagola
2017.04.04, 19:59
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

anton_z писал(а): 2017.04.04, 16:23 То есть у вас есть коллекция идентификаторов изображений в объявлении?
Да, только идентификаторы.
anton_z писал(а): 2017.04.04, 16:23 Сначала грузятся и сохраняются временные файлы, потом в первой транзакции в объявление записываются идентификаторы, потом отдельный процесс обновляет картинки?
Да, все так.
glagola
2017.04.04, 15:41
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Re: Как корректно внести изменения в несколько агрегатов за раз?

У вас один агрегат - обхявление. По идее, всё это должно быть одним агрегатом. В проекте 4 вида объявлений + аватарки пользователей. Поэтому выделил изображения в отдельную подсистему, которая отвечает за загрузку, хранение, кроп&ресайз(+валидация размеров кропнутого изображения), удаление. В п...
glagola
2017.04.04, 13:24
Форум: Архитектура, дизайн, ООП
Тема: Как корректно внести изменения в несколько агрегатов за раз?
Ответы: 17
Просмотры: 6161

Как корректно внести изменения в несколько агрегатов за раз?

Всем привет! Столкнулся с проблемой как внести изменения в несколько агрегатов за один запрос (знаю что это крайне не рекомендуется, но придумать как это обойти пока не могу). Суть Есть агрегат объявление пользователя , к которому могут прикрепляться/загружаться фотографии (сейчас это реализованно к...
glagola
2017.02.26, 23:24
Форум: Архитектура, дизайн, ООП
Тема: Рефакторинг фабричного метода
Ответы: 16
Просмотры: 5199

Re: Рефакторинг фабричного метода

Загвоздка в том чтобы ограничить создание пользователя только через фабрику т.к. он должен содержать дополнительные поля, необходимые для инфраструктуры (в частности это $authKey для IdentityInterface в Yii2) $user = $this->userFactory->create($id, $name); $user->signupByEmail($email, $password); $...