Следует ли использовать объект entity или value при ссылке на объект другого ограниченного контекста?

#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 VO UserId
  • Management ограниченный контекст: 2 объекта Visitor Manager и 1 VO UserId

Для дальнейшего чтения я рекомендую этот блог углубиться в правильное проектирование aggregate: