PHP OOP:为域实体提供“身份”

时间:2010-04-20 20:06:45

标签: php model map dns identity

这里有一个抽象问题。我正在尝试使用域模型模式,并禁止我的其他争斗依赖 - 我需要一些关于生成Identity以在身份图中使用的建议。

在我看到的Data Mapper模式的大多数示例中(包括本书中概述的那个:http://apress.com/book/view/9781590599099) - 用户似乎使用setter手动设置给定Domain Object的标识:

$UserMapper = new UserMapper;

//returns a fully formed user object from record sets
$User = $UserMapper->find(1);

//returns an empty object with appropriate properties for completion
$UserBlank = $UserMapper->get();
$UserBlank->setId();
$UserBlank->setOtherProperties();

现在,我不知道我是否错误地阅读了这些示例 - 但是在第一个$ User对象中,从数据存储中检索了$ id属性(我假设$ id表示行id)。但是,在后一种情况下,如果某个对象尚未从数据存储中获取对象,如何为其设置$ id? 问题是为对象生成一个有效的“身份”,以便可以通过身份映射进行维护 - 因此生成一个任意整数并不能解决它。

我目前的想法是为身份(即电子邮件)提名不同的字段,并要求他们在生成空白域对象时存在。或者,要求完全形成所有对象,并使用所有属性作为其身份......几乎没有效率。

(或者,转储域模型概念并返回DBAL / DAO / Transaction Scripts ...与我见过的ORM实现相比,它看起来越来越优雅......)

1 个答案:

答案 0 :(得分:0)

如果要控制ID,可以使用setId函数,如果要覆盖数据存储ID,或者如果要更新/删除数据而不必先检索数据(即已经拥有ID) POST)。 另一种方法是调用setId()通过“查询”(插入记录)数据存储为下一个可用ID来保留ID。

在您确实需要使用它来引用某些内容之前,设置ID并不是真正相关的。除了将对象标记为新数据之外,调用没有参数的setId将不会执行任何操作。一旦你真正尝试“获取”ID,就会产生一个ID。对懒惰ID生成进行排序。