数据映射器API - 不确定组织结构

7
假设我们有“用户”和“酒店”模型类。我会使用User_Mapper和Hotel_Mapper进行加载/保存/删除等操作。然后,我希望用户能够标记他们“喜欢的”酒店。在数据库中,我有一个名为user_favourite_hotels 的简单链接表,还有一个用于订阅酒店更新的字段。
在列出用户喜欢的酒店时,您如何从API角度来看待这个问题?我的一部分认为,这应该是Hotel_Mapper上的“findFavouritesByUserId”方法,但除了说它“感觉”正确之外,我的同事建议“收藏品”归用户所有,因此应在User_Mapper上。
也许我应该有一个User_Hotel_Favourites_Mapper?我正在考虑将“收藏品”数据合并到User对象中,因此每当加载User对象时都会保存和加载它。但我不确定是否将其拆分为自己的对象和映射器更好。
我希望获得有关上述设置API的最佳建议以及任何优缺点/经验。
非常感谢,
詹姆斯。
3个回答

2
这份(虽然已经停用的)设计数据层组件的patterns&practices指南建议将方法放在从调用中返回的对象类型的映射器中。

如果您有返回特定业务实体类型的方法,请将这些方法放在该类型的数据访问逻辑组件中。例如,如果要检索客户的所有订单,请在订单数据访问逻辑组件中实现该功能,因为返回值是Order类型。相反,如果要检索购买了特定产品的所有客户,请在Customer Data Access Logic Component中实现该功能。

因此,在您的示例中,它应该放在Hotel Mapper中,因为它返回的是Hotels。

1
如果您想为用户存储喜爱的酒店,可以使用 UserMapper。它会注意到 User 的领域对象已更改收藏夹,并更新用户和用户收藏酒店的两个表(只需要酒店 ID)。
当您检索某个用户的收藏酒店时,可以使用 HotelMapper 并将过滤器设置为基于 User,因为您将使用 Hotel 实例进行操作。

0
考虑到这个问题是两年前提出的,我不确定现在是否还有回答的必要。但无论如何,以下是我的想法。
如果用户可以拥有多种类型的收藏(包括酒店),那么创建一个UserFavourites抽象类来涵盖所有可能的收藏类型可能是有意义的。UserFavourites可以公开一个getItems()方法来获取底层的Favourites。
这可以通过一个管理类来实现,以返回适当的Favourites对象(例如FavouriteHotels),然后可以调用getItems()方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接