我发现两种模式似乎有相同的目标 - 有什么区别?
答案 0 :(得分:43)
[Repository]是映射的另一个抽象层 查询构造代码集中的层。
DataMapper
确保围栏的数据库端不需要知道业务逻辑的具体细节以及业务对象如何将数据保存在内存中,并且围栏的业务方面不会我需要知道如何存储数据。
为了说明,请考虑您的数据作为一组行保存在数据库中,例如每行代表商店中的项目。在内存方面,您可能希望将该信息保留为StoreItem
列表,而不是两个列表,一个用于库存商品,另一个用于缺货商品。
处理一个列表和两个列表之间的转换将是DataMapper
的工作。
通过在fence的业务端添加其他对象和继承的列表,可以使事情复杂化。 'DataMapper'必须从该表示转换为关系数据库。
“Repository”为业务方提供了“SELECT * FROM table WHERE condition”功能。您提供了一个过滤器,它将返回与该过滤器匹配的对象集合。
简而言之:'DataMapper'处理单个对象,'Repository'处理对象集合并扩展'DataMapper'提供的功能。