我在我正在开发的PHP应用程序中使用数据映射器模式并且有一个问题.目前,您请求具有特定ID的Site对象,映射器将查找该行,创建对象并将其返回.但是,如果对同一站点再次执行此操作,则最终会得到两个具有相同数据的不同对象.例如.:
$mapper = new Site_Mapper(); $a = $mapper->get(1); $b = $mapper->get(1); $a == $b // true $a === $b // false
所以,我的问题是,我应该:
在mapper中存储实例化的Site对象,这样我就可以在创建一个新对象之前检查它们是否已经存在(如果有多个相同类型的映射器,可能会出现问题)
与#1相同,但确保每个映射器只有一个实例
与#1相同但使用静态属性,因此多个实例不是问题
不要担心它,因为它 可能不是问题
openfrog.. 5
您正在寻找的是身份地图模式.但要注意所谓的"阅读不一致".使用"旧实例"时,数据库可能已经更改.在编辑对象时,另一个用户可能会获得它的实例,更快地更改它并更快地保存它.然后另一个对象再次覆盖所有这些更改.在网络上虽然可能不是一个大问题,因为"页面"快速通过并且没有对象存活超过几个小秒.
您正在寻找的是身份地图模式.但要注意所谓的"阅读不一致".使用"旧实例"时,数据库可能已经更改.在编辑对象时,另一个用户可能会获得它的实例,更快地更改它并更快地保存它.然后另一个对象再次覆盖所有这些更改.在网络上虽然可能不是一个大问题,因为"页面"快速通过并且没有对象存活超过几个小秒.