Как установить бизнес-логику, которая требует данных из БД в домене, управляемом дизайном

Я пытаюсь выучить 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 обсуждается конкретный вариант использования.

Очень надеюсь, что это поможет несколько. -Очень жаль, что я не работал с тобой над этим в команде и не смог бы ее решить.

Другие вопросы по тегам