Т.Л., д-р:
Я люблю маленькие, сфокусированы классы командно-паттерна, такие как SetProjectAsActiveCommand
, но я также подход для DDD создания моделей, отвечающие за их собственные основную бизнес-функции, такие как вызов Project::setAsActive()
. Могут ли две идеи работать вместе или они являются взаимоисключающими архитектурами?
/Т.Л., дрДомен-привод-дизайн против шаблона команды - взаимоисключающий?
Я работаю над проектом в течение последних нескольких месяцев, в которых мы использовали шаблон Command, который имеет классы, как ProposeNewProjectCommand
, SetProjectAsActiveCommand
и AddCommentToProjectCommand
, все из которых обрабатываются командной шиной. Эти классы, как правило, довольно малы и сосредоточены, делая только одно.
Недавно я читал о Domain-Driven-Design (DDD) и я понимаю, что такой подход опирается в большей степени на модели делают работу сами, поэтому команды выше, могут быть заменены Organisation::proposeNewProject()
, Project::setAsActive()
и Project::addComment()
.
Имея эти методы на модели означает, что они могут действовать как «агрегированные корни» (например, в приведенных выше примерах, Project
отвечает за создание своих собственных комментариев).
Хотя мне очень нравится идея, что мои сущности больше несут ответственности за свои основные бизнес-функции, я также обеспокоен тем, что мои модели могут действительно быть действительно большими, с множеством методов на них, относящихся к различным вещам, которые приложение может делать.
Есть ли способ иметь небольшие, сосредоточенные классы шаблона Command, в то же время делая модели первоклассных граждан ответственными за их ключевые бизнес-функции, такие как DDD? Или способ решить потенциальную проблему большой модели?
Или, в качестве альтернативы, следует выбрать один шаблон и использовать его исключительно?
Заранее спасибо за любую проницательность вы можете дать,
Харрисон
PS. Я никогда не работал над приложением, использующим DDD, поэтому извиняюсь, если это невероятно наивный вопрос.
Из того, что я вижу, опытные разработчики склонны идти в этом направлении: DDD как стратегический дизайн и архитектура на основе сообщений + CQRS как реализация. – MikeSW