Подтвердить что ты не робот

Могут ли репозитории DDD знать контекст пользователя?

Предположим, вы должны разработать систему, доступность которой для сущностей и логики домена сильно зависит от контекста пользователя. Имеет ли смысл обрабатывать чувствительность пользовательского контекста в репозиториях, создавая индивидуальные контексты экземпляров конкретного репозитория? Я рассматриваю возможность использования этой методологии в качестве способа избавления от пользовательского контекста от моих сущностей, но я не уверен, есть ли какие-либо подводные камни, о которых я, возможно, не знаю, идя в этом направлении. Способ, которым я планирую приблизиться к этому, заключается в том, чтобы добавить параметр UserContext в конструкторы репозиториев, которым нужна эта контекстная информация. Другим очевидным вариантом будет подача информации о контексте пользователя в каждый метод запроса в моих репозиториях, но это, вероятно, означает, что для большинства всех методов потребуется такой параметр, который в свою очередь значительно увеличит многословие каждого вызова метода.

Также я хотел бы отметить, что я знаю, что даже если я хочу, чтобы пользовательский контекст хранилища понимал, что это не обязательно помогает напрямую, когда службе или сущности требуется эта же информация о пользовательских контекстах по таким причинам, как определение поведения на основе пользовательской конфигурации. Я также заинтересован в других решениях для этих случаев, но на данный момент я пытаюсь решить одну вещь за раз, поэтому сначала сосредоточусь на хранилищах.

Любые предложения будут оценены.

4b9b3361

Ответ 1

Я чувствую запах дизайна здесь:-). Вещи к тому времени, когда они достигают домена, должны в значительной степени быть переведены в сущности/атрибуты домена и не должны иметь зависимости от контекста. Я имею в виду, что контекст должен использоваться для изменения/представления нового состояния объекта. Здесь более похоже, что этот контекст будет использоваться для определения того, как объект будет сохранен. Правильно ли я понял это?

Сказав это, если ваша зависимость от контекста больше связана с точки зрения инфраструктуры, а не с точки зрения бизнес-функциональности, то наличие контекстно-зависимых репозиториев - это правильная модель, с которой вы столкнулись.

К этому вы могли бы рассмотреть возможность передачи usercontext через поток локальный, например, Spring с сеансом Hibernate? Таким образом, ваши конструкторы или методы класса Repository будут менее загрязнены. Это, однако, немного снижает читабельность вашего кода.

Надеюсь, что это поможет.