Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 数据映射器API-不确定组织_Oop_Design Patterns_Datamapper - Fatal编程技术网

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()
方法