Я пытаюсь понять, почему Вон Вернон (в примере кода Github для красной книги) включает tenantId в каждый метод получения или поиска в репозитории. В частности, те, которые выполняют базовый c getById.
. В одном примере он использует имя пользователя для предоставления идентификатора пользователя и бизнес-правило, согласно которому имена пользователей должны быть уникальными в пределах аренды, поэтому:
class UserRepository:
public User userWithUsername(TenantId aTenantId, String aUsername)
Совершенно логично.
Но в других своих BC он использует объект значения идентификатора, основанный на GUID, но все же комбинирует его с tenantId при извлечении из хранилища:
class ProductRepository:
public Product productOfId(TenantId aTenantId, ProductId aProductId)
Даже в примере CQRS используется комбинация tenantId и entityId для одного метода get для репозиториев.
Повсеместно, но я не могу понять, зачем это нужно. Если продукт, элемент журнала, форум, календарь и т. Д. c имеют глобально уникальный идентификатор, зачем вам что-то еще, чтобы запросить их?
Если использовать это, чтобы гарантировать, что только объекты для конкретного арендатора могут быть найдено - это не ответственность, ожидаемая от хранилища, а скорее аутентификация et c, и поэтому зачем включать в каждый метод запроса хранилища?
Обратите внимание, я понимаю, почему в качестве атрибута используется tenantId от сущности требуется, и как это может быть использовано для обеспечения некоторых уникальных ограничений. Однако при извлечении продукта не будет ли достаточно productOfId (ProductId aProductId)?
Он затрагивает этот вопрос: «В случае многопользовательской среды экземпляр TenantId также считается частью уникальной идентификации». Какое значение имеет объединение двух идентификаторов GUID для определения идентичности над одним?