[Repository] 是对映射层的另一层抽象,专门处理查询构建代码。
DataMapper
确保数据库不需要知道业务逻辑及数据对象在内存中的保存方式,而业务端也无需了解数据的存储方式。
举例来说,假设你的数据以一行一行的方式保存在数据库中,每一行代表着商店里的一个商品。但在内存中,你可能不希望将这些信息保存为一个 StoreItem
列表,而希望将其分成两个列表,一个列出有库存的商品,另一个列出没有库存的商品。这就是 DataMapper
的工作,它可以处理从一个列表到两个列表之间的转换。
如果你想在业务端添加其他对象列表或继承等复杂情况,DataMapper
就需要将其转换为关系型数据库所能理解的形式。
而 'Repository' 则为业务端提供了类似 "SELECT * FROM table WHERE condition"
的功能,你只需要提供一个过滤器,它就会返回与该过滤器匹配的对象集合。
简而言之,DataMapper
处理单个对象,而 'Repository' 处理对象集合,并扩展了 DataMapper
的功能。
List<Subscription>
,每个Subscription
都有一个List<AddOn>
。我可以在存储库层获取所有这些数据并返回它们,但是存储库是否会执行实际上是映射层工作的任务呢? - Stefan Falk