Finder方法应该是数据映射器的一部分还是域类的一部分?
在Martin Fowler的“企业应用程序体系结构模式”一书中(德语为Lazy Load的第229页),他以下面的代码给出了一个例子:
public List getProducts() {
if (products == null) products = Product.findForSupplier(getID());
return products;
}
就像你所看到的那样,查找器方法似乎是域类Product的一部分。 这让我感到困惑,因为我认为与从某处(通常是数据库,但业务逻辑不应该关心)检索对象有关的所有内容都应该是Data Mapper(PersonDataMapper)类的一部分。 大概我错过了什么?
您给出的例子是Lazy Loading的简单方法。 Person不太可能使用DataMapper。 正如福勒在英文书(201)中所述:
使用延迟初始化很简单,但它倾向于强制对象与数据库之间的依赖关系。 出于这个原因,它最适合ActiveRecord,表格数据网关和行数据网关。 如果您使用的是Data Mapper,则需要额外的间接层,您可以使用虚拟代理 [GOF]获取这些间接层。
至于一切应该在DataMapper中,嗯..是的,但也没有。 在使用设计模式时,您应该记住什么时候使用它们,何时不使用它们。 DataMapper不是圣杯。 这不是唯一的方法。 当您的应用只是一个生活在网络上的小而简单的CRUD应用时,那么增加数据映射器和/或使用域模型的复杂性可能是不值得的。
另外,设计模式是通用软件问题的通用良好实践方法。 虽然你可以将它们应用于书中给出的具体问题,但没有理由虔诚地遵守它们。 如果某种模式中的某些内容会使解决问题过于复杂,那么保持简单。 派生。 调整。 解决这个问题。
链接地址: http://www.djcxy.com/p/56283.html上一篇: Should a Finder Method be part of the Data Mapper, or part of the domain class?