Всем добра!
Развиваюсь в сторону DDD, есть интересный для меня вопрос.
Ситуация(для примера):
- есть доменная сущность House
- в этой сущности есть метод getSummCount, результат метода - число, но формируется оно очень тяжеловесным SQL запросом.
Сейчас, на этапе разработки, я запилил SQL-запрос прямо в доменную сущность. Плюсы - работает. Минусы - не тестируется, инфраструктурная логика в домене. Понимание того, что в домене не должно быть репозитарного кода - имеется.
Итак.
Первая идея - реализация в сервисе с учётом переданного репозитория, например HouseService->findById($id), где ищем по id, считаем summCount, и отдаём в конструктор return new House (...., $summCount). Минусы - запрос тяжелый, и нужен совсем не везде.
Вторая идея - в нужном контроллере, после получения сущности, делать метод HouseService->calcSummCount, который будет делать set для нашего экземпляра в переменную House->summCount
Как мне сделать эту цифру "по необходимости", к чему стремиться?
DDD, тяжелые запросы для построения сущности
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: DDD, тяжелые запросы для построения сущности
Думаю вторая идея в самый раз. Добавил в сущность дполнительное поле sum. По мере необходимости через сервис расчитал сумму и сохранил в сущности. И дальше использовал только это поле.
Re: DDD, тяжелые запросы для построения сущности
Вариант - в сервисе запилить метод, который будет считать и возвращать это значение (либо вообще отдельный сервис с единственной функцией - HouseSummCountCalcService, что то в этом роде). Если запрос действительно тяжелый и редко нужен - не нужно в findById его вычислять. Ну и появляется еще дополнительный вопрос - действительно ли место в вашей доменной сущности методу getSummCount(). Я для таких специфических вещей люблю сервисы использовать.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: DDD, тяжелые запросы для построения сущности
Я бы тоже посмотрел в сторону отдельного сервиса (и репозитория для него). Особенно если метод специфичен для, например, отчёта.
Нравится Yii? Давайте сделаем его лучше!.
Re: DDD, тяжелые запросы для построения сущности
идея логична и понятна.
У меня вытекающий абстрактный вопрос. А есть какое то ограничение на передачу в домен напрямую репозитория/сервиса? Чтобы получать данные по декоратору. Ест-но исходя из философии DDD. Или все сущности нужно формировать внутри action ?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: DDD, тяжелые запросы для построения сущности
По-хорошему, должна быть граница. На этой границе всё специфичное для хранилища должно очищаться и становиться доменными DTO/Entity и наоборот.
Нравится Yii? Давайте сделаем его лучше!.