Oop 数据映射器API-不确定组织
假设我们有“用户”和“酒店”模型类。我会使用用户映射器和酒店映射器来加载/保存/删除等。然后,我想让用户能够标记他们最喜欢的酒店。在数据库中,我有我的Oop 数据映射器API-不确定组织,oop,design-patterns,datamapper,Oop,Design Patterns,Datamapper,假设我们有“用户”和“酒店”模型类。我会使用用户映射器和酒店映射器来加载/保存/删除等。然后,我想让用户能够标记他们最喜欢的酒店。在数据库中,我有我的user\u favorite\u hotels表,这是一个简单的链接表,还有一个订阅酒店更新的字段 当列出用户最喜欢的酒店时,从API的角度来看,您认为这将如何工作?我的一部分人认为,这应该是Hotel_Mapper上的“findFavouritesByUserId”方法,但除了说它“感觉”正确之外——然而,一位同事建议,“收藏夹”归用户所有,因
user\u favorite\u hotels
表,这是一个简单的链接表,还有一个订阅酒店更新的字段
当列出用户最喜欢的酒店时,从API的角度来看,您认为这将如何工作?我的一部分人认为,这应该是Hotel_Mapper上的“findFavouritesByUserId”方法,但除了说它“感觉”正确之外——然而,一位同事建议,“收藏夹”归用户所有,因此应该在用户_Mapper上
也许我应该有一个用户\u酒店\u收藏夹\u映射器?我正在考虑将“收藏夹”数据合并到用户对象中,以便在用户对象被激活时保存和加载它。不过,我不确定是否最好将其拆分为自己的对象和映射器
如果您能就如何最好地设置上述API以及任何优点/缺点/经验提供建议,我将不胜感激
非常感谢
James.这(公认已退休)表明您将该方法放入从调用中返回的对象类型的映射器中
如果您有返回特定类型业务实体的方法,请将这些方法放在该类型的数据访问逻辑组件中。例如,如果要检索客户的所有订单,请在订单数据访问逻辑组件中实现该功能,因为返回值的类型为订单。相反,如果要检索已订购特定产品的所有客户,请在客户数据访问逻辑组件中实现该功能
因此,在您的示例中,它将在返回酒店时进入酒店映射器。如果您想为用户存储最喜爱的酒店,您将使用
UserMapper
,它注意到用户的域对象已更改了收藏夹,并更新了用户和用户最喜爱的酒店的两个表(您只需要酒店ID)
当您检索某个用户最喜欢的酒店时,可以使用HotelMapper
,并将过滤器设置为基于user
,因为您将使用酒店的实例,考虑到这是两年多前提出的问题,我不确定现在的答案对您是否重要。但我还是这么想的
如果User
可以有多种类型的收藏夹(包括Hotel
s),那么有一个userfavorities
抽象来涵盖所有可能的收藏夹类型可能是有意义的。userfavorities
可以公开一个getItems()
方法来获取基础收藏夹
这可以在manager类的帮助下进行管理,以返回相应的Favorites对象(例如,FavoriteHotels
),在该对象上可以调用getItems()
方法