Итак, я просмотрел несколько сообщений о шаблоне спецификации здесь и еще не нашел ответа на этот.
У меня вопрос в том, где именно в n-слойной архитектуре мне следует "обновить" спецификации?
Я мог бы поместить их на свой уровень обслуживания (также известный как уровень приложения, который иногда называют ... в основном, что-то, с чем может разговаривать код программной части .aspx), но я чувствую, что делая это, я позволяю бизнес-правилам просачиваться из Домен. Если доступ к объектам домена осуществляется другим способом (помимо уровня обслуживания), объекты домена не могут применять свои собственные бизнес-правила.
Я мог внедрить спецификацию в свой класс модели с помощью инъекции конструктора. Но опять же, это кажется «неправильным». Я чувствую, что единственное, что следует вводить в классы модели, - это «службы», такие как кэширование, ведение журнала, отслеживание грязных флагов и т. Д. И если вы можете этого избежать, использовать аспекты вместо засорения конструкторов модели. классы с множеством сервисных интерфейсов.
Я мог бы внедрить спецификацию посредством внедрения метода (иногда называемого «двойная отправка» ???), и явно сделать так, чтобы этот метод инкапсулировал внедренную спецификацию, чтобы обеспечить соблюдение своего бизнес-правила.
Создайте класс «Службы домена», который будет принимать Спецификацию (и) через внедрение конструктора, а затем позволить Уровню Службы использовать Службу Домена для координации объекта Домен. Мне это кажется нормальным, поскольку правило, обеспечиваемое Спецификацией, все еще находится в «Домене», а класс Службы Домена можно назвать очень похожим на объект Домена, который он координирует. Дело в том, что я чувствую, что пишу МНОГО классов и кода только для того, чтобы «правильно» реализовать шаблон Спецификации.
Добавьте к этому, что рассматриваемая спецификация требует репозитория, чтобы определить, "удовлетворено" оно или нет.
Это потенциально могло вызвать проблемы с производительностью, особенно. если я использую инъекцию конструктора, b / c потребляющий код может вызвать свойство, которое, возможно, является оболочкой спецификации, и это, в свою очередь, вызывает базу данных.
Итак, есть идеи / мысли / ссылки на статьи?
Где лучше всего обновляться и использовать спецификации?