所以,我在这里查看了一些关于规范模式的帖子,但还没有找到答案。
我的问题是,在 n 层架构中,规范究竟应该在哪里“更新”?
我可以将它们放在我的服务层(又名,有时称为应用程序层......基本上,一个 .aspx 代码隐藏会与之交谈的东西),但我觉得这样做,我让业务规则泄露出去域。如果通过其他方式访问域对象(除了服务层),域对象就不能强制执行它们自己的业务规则。
我可以通过构造函数注入将规范注入我的模型类。但同样,这感觉是“错误的”。我觉得应该注入模型类的唯一东西是“服务”,如缓存、日志记录、脏标志跟踪等......如果你能避免它,使用 Aspects 而不是乱扔模型的构造函数具有大量服务接口的类。
我可以通过方法注入(有时称为“双重调度”???)注入规范,并明确地让该方法封装注入的规范以强制执行其业务规则。
创建一个“域服务”类,它将通过构造函数注入获取规范,然后让服务层使用域服务来协调域对象。这对我来说似乎没问题,因为规范强制执行的规则仍然在“域”中,并且域服务类的命名非常类似于它正在协调的域对象。这里的事情是我觉得我正在编写很多类和代码,只是为了“正确”实现规范模式。
除此之外,有问题的规范需要一个存储库才能确定它是否“满意”。
这可能会导致性能问题,尤其是。如果我使用构造函数注入 b/c 消费代码可以调用一个可能包装规范的属性,而这反过来又调用了数据库。
那么有什么想法/想法/文章链接吗?
新建和使用规范的最佳地点在哪里?