#domain-driven-design
#domain-driven-design
Вопрос:
В моем домене у меня есть два ограниченных контекста, identity
и management
.
В identity
ограниченном контексте у меня есть user
объект. И управление у меня есть visitor
и manager
. Оба visitor
и manager
имеют несколько разных атрибутов, и оба ссылаются на user
.
Если visitor
и manager
являются объектами, могу ли я использовать идентификатор пользователя для их идентификатора? Мое намерение состоит в том, чтобы использовать api, подобный visitors/:userID
.
Если они являются объектами value, то как я могу сохранить атрибуты для каждого типа объектов?
Ответ №1:
При использовании другого ограниченного контекста важно сохранять их изолированными, поскольку они используют один и тот же повсеместный язык, но значение отличается от одного контекста к другому.
Такой дизайн вполне возможен. Например, в вашем ограниченном контексте identity
у вас есть объект Value UserId
(скорее всего). Это может состоять из разных атрибутов, но для упрощения предположим, что это просто инкапсулирует String
.
Затем в вашем management
ограниченном контексте вы можете использовать объект Value UserId
, но специфичный для вашего ограниченного контекста, в новом классе.
Затем, о вашем entities
visitor
и manager
: оба являются совокупным корнем, и так оно и есть entities
. Они просто являются точкой входа в ваш Aggregate. Они являются объектами, но их идентификатор является объектом value UserId
.
В итоге получается следующий возможный код:
public class Visitor {
private UserId id;
// some other attributes and domain method
}
public class Manager {
private UserId id;
// some other attributes and domain method
}
Это действительно ограниченный пример, но, подводя итог, у вас есть:
Identity
ограниченный контекст: 1 объектUser
и 1 VOUserId
Management
ограниченный контекст: 2 объектаVisitor
Manager
и 1 VOUserId
Для дальнейшего чтения я рекомендую этот блог углубиться в правильное проектирование aggregate:
- Во Вернон — Сообщество DDD — Эффективный агрегированный дизайн
- Также эта книга: Реализация дизайна, управляемого доменом, Во Вернона