31

我发现两种模式似乎具有相同的目标 - 有什么区别?

http://martinfowler.com/eaaCatalog/dataMapper.html

http://martinfowler.com/eaaCatalog/repository.html

4

1 回答 1

45

[存储库是] 映射层之上的另一抽象层,查询构造代码集中在该层。

确保栅栏的DataMapper数据库端不需要知道您的业务逻辑的细节以及业务对象如何将数据保存在内存中,而栅栏的业务端不需要知道数据的情况存储。

举例来说,假设您的数据作为一组行保存在数据库中,假设每一行代表您商店中的一个项目。在内存方面,您可能希望将该信息保留StoreItem为两个列表,而不是一个列表,一个用于库存商品,另一个用于缺货商品。DataMapper处理一个列表和两个列表之间的转换将是的工作。

您可以通过在栅栏的业务方面添加其他对象列表和继承来使事情复杂化。'DataMapper' 必须在该表示形式和关系数据库之间进行转换。

“存储库”为业务方提供“SELECT * FROM table WHERE 条件”功能。您提供一个过滤器,它将返回与该过滤器匹配的对象集合。

简而言之:“DataMapper”处理单个对象,“Repository”处理对象集合并扩展“DataMapper”提供的功能。

于 2012-11-25T12:17:24.113 回答