Краткий ответ: да, это плохая практика (или даже не практика).
As Martin Fowler выражает:
A DDD aggregate - это кластер объектов домена, который можно рассматривать как единое целое
Одним из следствий этого оператора является то, что агрегаты необходимо хранить в транзакционном режиме. Агрегированный код будет обеспечивать согласованность своего состояния в памяти, но если вы не можете обеспечить эту согласованность в базе данных, у вас возникнут проблемы.
Наличие агрегата, хранящегося в нескольких базах данных, означает, что вы либо не сможете хранить их в транзакционном режиме (чего делать не следует), либо вам придется использовать распределенные транзакции (чего делать не следует. либо в идеале).
Что касается вашей конкретной проблемы c, либо ваш агрегат неверен, либо ваша база данных неверна.
Чтобы увидеть, ошибочен ли ваш агрегат, подумайте, зачем вам это свойство Name
в этом агрегате? Он должен быть там только в том случае, если ему нужно изменить транзакционно с остальной частью агрегата или агрегату он нужен для выполнения своей бизнес-логики c.
Если агрегат верен, переместите свойство Name
в ту же базу данных (и, скорее всего, в ту же таблицу), что и остальная часть агрегата. Если по какой-то причине вам нужен Name
в этой другой базе данных, чтобы быть доступным для некоторых запросов, поддерживайте его с конечной согласованностью (когда имя изменяется в совокупности, событие publi sh en и подпишитесь на него, чтобы обновить база данных запросов).