Могут ли репозитории DDD знать о пользовательском контексте? - PullRequest
15 голосов
/ 21 марта 2011

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

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

Будем благодарны за любые предложения.

1 Ответ

1 голос
/ 21 марта 2011

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

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

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

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

...