Как установить бизнес-логику, которая требует данных из БД в домене, управляемом дизайном
Я пытаюсь выучить DDD, поэтому терпите меня, пожалуйста. Допустим, у меня есть агрегат под названием Issue. У него есть свойство StatusId. Этот статус может быть т.е. Открыто, Закрыто... и хранится в таблице базы данных под названием Статусы. (это потому, что конкретный пользователь может иметь определенные статусы, поэтому я хочу, чтобы пользователь мог добавлять новые статусы) Теперь я создал метод, подобный этому, в совокупности проблем: public static void SubmitIssue(Guid projectId, string issueTitle, описание строки...)
этот метод создает новый выпуск с требованием. параметры и после этого мне нужно установить его в правильное состояние. Но состояние указано в БД. Как справиться с этим сценарием, когда я должен получать данные из БД при выполнении бизнес-логики, которая не должна быть куплетной, чтобы вообще получить доступ к базе данных? Пожалуйста помоги
1 ответ
Ваша проблема немного больше, чем просто проблема DDD. Это действительно о ОО дизайн. Проблема в том, что вы не хотите, чтобы перечисление заставляло вас принимать решения повсюду. -Засоряющий код с безобразным переключателем и операторами if.
Нет простого или точного ответа на это.
Что бы я попытался сделать:
У вас есть класс Issue (это могут быть разные типы), что означает, что вы можете наследовать и реализовывать бетоны на основе этого типа. Важно, хотя! Если проблема может измениться от одного типа к другому, наследование в классе проблемы является неправильным маршрутом. В этом случае вам необходимо переместить логические различия этих типов (и применяемые ими бизнес-правила) в класс IssueType, и ваш класс Issue должен быть создан с соответствующим IssueType.
У дяди Боба есть очень хороший пример, который очень похож на вашу проблему, которую он обсуждает в своей книге: http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445
Конечно, он не говорит о БД в примере, но в этом и заключается смысл DDD.
У меня есть PDF версия, поэтому страницы могут немного отличаться.: На страницах с 454 по 456 обсуждается конкретный вариант использования.
Очень надеюсь, что это поможет несколько. -Очень жаль, что я не работал с тобой над этим в команде и не смог бы ее решить.