В нашей эры у меня есть следующие правила:Wrap роли домена вокруг совокупности корневых операций представляют вездесущий язык
A project can be defined by an employer.
An approver should approve the project.
Then an employee can bid that project.
A project can be directed by a member (= an employer or an employee) to another member.
Проект является независимым агрегатный от работодателя, работника и утверждающего.
И все работодатели, работники и утверждающие - все пользователи, и все, что мне нужно знать от пользователей в этом BC, - это их Тождества.
Я разработал проект, включая методы:
static Define(){...}
ApprovedBy(approderId){...}
Bid(bidderId){...}
Direct(directorId,directeeId){...}
Как следует применять остальные вездесущего языка в контексте?
Должен ли я пропустить Users
в этом контексте или создавать классы для работника, работодателя и утверждающими и сделать, например, в Approve
методе внутренних, так что ограничить приложение слой только смогут одобрить проект через Approver
класса, как следующее ?
class Approver{
approverId _id
public Approver(approverId id){
_id = id
}
public Approve(project){
project.ApprovedBy(_id);
}
}
Update:
Вот некоторые комментарии Iv'e написанные на ответы, которые могут сделать вопрос яснее:
Approver
является роль, которую определяется в Identity and Access BC
, и единственное, что должно это имя роли. Bidder
должен был заполнить некоторые дополнительные данные, чем обычный член, чтобы иметь возможность bid a project
. Я хотел использовать saga
и выслушать events
, чтобы проверить, удовлетворено ли участником правило, затем saga
отправляет AddRole()
или RemoveRole()
по I & A BC. Я думал, что таким образом у меня есть более сплоченной I&A
озабоченность, которая отделена от остальной части системы, но когда я проектирования Project BC
я подумал, почему бы не назвать что-то вроде factories.Employer(employerId).DefineProject(..)
НО
Я беспокоиться о будущих функции, которые будут расти после первоначального выпуска. Они могут ожидать, например, больше правил для Employer
, и, когда я начал добавлять их в BC, мне придется разбить мои тесты, чтобы избежать утечки Project
обязанности Employer
, например, я больше не мог бы звонить DefineProject()
как static factory
(или constructor
), и единственный способ определить project
должен быть вызван Employer.DefineProject();
, и я чувствую естественное место, которое должно быть у Approvement
, это класс Approver
. Вы думаете, что я над инженерией?
Одна из причин, по которой мы инкапсулируем все, даже идентификаторы в другом объекте в ddd, самостоятельно заботится об изменении требований, определяя явные контракты между объектами и позволяя им изменять свои внутренние реализации в другом контексте. ПО не заботится много о тождествах, но он явно говорит о ролях и их правилах. Это может повлиять на мои тесты и коды уровня сервиса позже. Разве я не должен заботиться о ролях, по крайней мере, столько же, сколько личности? Или я неправильно понял что-то о границах и контрактах?
Может явно абстрактный role contracts
выступать в качестве потенциального anti corruption layer
interface
, который может держать меня подальше от взлома OCP
?
Может ли какая-либо другая логика иметь классы Approver, Director и Bidder? – tomliversidge
@tomliversidge: Еще в этом до н.э. – Mohsen
Тогда я бы не стал беспокоиться, просто придерживайтесь первого примера кода – tomliversidge