@springimport

Как связать 2 сущности?

Решил разобраться в DDD и встал перед проблемой формирования сущностей. В данный момент в проекте есть 2 источника: собственная база и API. Частично сущности пересекаются и можно сделать код который будет работать с 2 системами, но есть исключения. Например, в обоих системах есть пользователи разных типов которые ничего не знают друг о друге и требуют манипуляцию с каждым отдельно. Не понятно как в таких случаях применять DDD.

Есть ли примеры таких решений?
  • Вопрос задан
  • 323 просмотра
Решения вопроса 1
sggr
@sggr
PHP, Ruby, GO
PS: Я не хочу как-то закидать Yii какахами, поэтому подчеркиваю - нужно выбирать инструмент реализации исходя из потребностей.

Вы не сможете полноценно применять DDD в Yii. Потому что Yii не способен на это =) (способен, но нужно допиливать).

Суть DDD в выделении предметной области и ее независимости от реализации и инфраструктуры. То есть предметная область, ваша логика, должна быть написана чуть ли не на голых объектах. То есть она вообще независима, вы можете взять написать тест на объект предметной области и он будет работать без фреймворка.

При использовании DDD вам просто необходимы конструкторы, объект не может быть создан если не указаны все его параметры. И за это должен отвечать не какой-то там валидатор или база или сеттеры, за это должен отвечать конструктор!

Объект предметной области не может маппиться на базу внутри этого объекта - это уже часть реализации. Это нарушает букву S в такой штуке как SOLID =)

В Yii по факту не получится разбить приложение на слои Domain layer, Persistance Layer, Application (Service) Layer, View Layer. Из за модульной архитектуры. Можно допилить, но зачем?

Нужно отказываться от Active Record полностью, ставить доктрину или писать свои мапперы в Persistance Layer, что геморойно.

Ну и вывод:
Вообще Yii сам по себе очень простой фреймворк для простых задач, для прототипирования, для приложений с коротким циклом поддержки, в котором использование ERP практик из коробки невозможно. При этом я не отрицаю, что на нем можно написать большое приложение и может быть (здесь я не уверен), вы сможете его поддерживать долгое время. Сильная связанность всех компонентов, ActiveRecord, убогий DI контейнер (может что-то поменялось, но в 1ых версиях Yii2 он был реально убогий) и тдтп. Почитайте про объектно-ориентированный дизайн, про SOLID, вникните и еще раз взгляните на свой код на Yii. И если вам реально необходим DDD, посмотрите на более подходящие решения - Symfony, Zend.

По конкретно вашей задаче нужно больше информации. Что за манипуляции вы хотите с ними производить, насколько пользователи отличаются друг от друга, сами объекты, являются ли они наследниками по принципу Liskov. Что за код, который может работать и с тем и с другим. Зависит ли этот код от реализации или он использует только объекты предметной области.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы