gpt4 book ai didi

PHP 面向对象编程 : Providing Domain Entities with "Identity"

转载 作者:行者123 更新时间:2023-12-03 04:12:03 25 4
gpt4 key购买 nike

这里有一个抽象问题。我正在尝试域模型模式,并禁止我与依赖项发生其他冲突 - 我需要一些关于生成用于身份映射的身份的建议。

在我见过的大多数数据映射器模式示例中(包括本书中概述的示例: http://apress.com/book/view/9781590599099 ) - 用户似乎使用 setter 手动设置给定域对象的标识:

$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,如何设置该对象的 $id 呢?问题是为对象生成一个有效的“身份”,以便可以通过身份映射来维护它 - 因此生成任意整数并不能解决问题。

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

(或者,转储域模型概念并返回 DBAL/DAO/事务脚本...与我见过的 ORM 实现相比,这似乎越来越优雅...)

最佳答案

如果您要控制 ID、想要覆盖数据存储 ID、或者想要更新/删除数据而无需先检索数据(即已经从某个数据库获取了 ID),则可以使用 setId 函数。邮政)。另一种替代方法是调用 setId() 通过“查询”(插入记录)数据存储中下一个可用 ID 来保留 ID。

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

关于PHP 面向对象编程 : Providing Domain Entities with "Identity",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com