В каком слое должны быть «обновлены» объекты шаблона спецификации?

Итак, я просмотрел несколько сообщений о шаблоне спецификации здесь и еще не нашел ответа на этот.

У меня вопрос в том, где именно в n-уровневой архитектуре мне следует «обновить» Спецификации?

  1. Я мог бы поместить их на свой уровень обслуживания (также известный как уровень приложения, который иногда называют ... в основном, что-то, с чем может взаимодействовать код программной части .aspx), но я чувствую, что делая это, я позволяю бизнес-правилам утечка из домена. Если доступ к объектам домена осуществляется другим способом (помимо уровня обслуживания), объекты домена не могут применять свои собственные бизнес-правила.

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

  3. Я мог внедрить спецификацию посредством внедрения метода (иногда называемого «двойная отправка» ???), и явно заставить этот метод инкапсулировать внедренную спецификацию, чтобы обеспечить соблюдение своего бизнес-правила.

  4. Создайте класс «Службы домена», который будет принимать Спецификацию (и) через внедрение конструктора, а затем позволить Уровню Службы использовать Службу Домена для координации объекта Домен. Мне это кажется нормальным, поскольку правило, обеспечиваемое Спецификацией, все еще находится в «Домене», а класс Службы Домена можно назвать очень похожим на объект Домена, который он координирует. Дело в том, что я чувствую, что пишу МНОГО классов и кода только для того, чтобы «правильно» реализовать шаблон Спецификации.

Добавьте к этому, что рассматриваемая Спецификация требует Репозитория, чтобы определить, "удовлетворено" оно или нет.

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

Есть какие-нибудь идеи / мысли / ссылки на статьи?

Где лучше всего обновиться и использовать спецификации?

7
задан Michael McCarthy 22 November 2011 в 21:29
поделиться