PHP ORM 最佳实践:从另一个对象类型中检索值:

Posted

技术标签:

【中文标题】PHP ORM 最佳实践:从另一个对象类型中检索值:【英文标题】:PHP ORM Best Practices: Retrieving values from another object type: 【发布时间】:2012-05-05 16:40:58 【问题描述】:

我最近开始使用 RedBean ORM。

我有一个用户 bean 类型来存储用户的信息,以及一个用于用户功能的关联 FUSE 模型。

当用户登录或会话已设置时,Redbean 会检索用户的信息,包括地址。

在用户登录之前,我通过 geoip 位置服务为新用户 bean 设置状态和城市值。

我想知道这种程序的最佳做法是什么。

在我看来,我有几个选择:

    在用户 FUSE 模型中创建一个方法,用于实例化 geoip 对象并设置值。 在FUSE模型之外实例化geoip对象并直接设置值,即:$user->state = $location->state; 在 FUSE 模型之外实例化 geoip 对象,但将对象传递给知道如何处理它的 FUSE 模型设置器。

我猜你真的不想做选项一,因为它为类创建了一个依赖项。

有什么想法吗?

【问题讨论】:

【参考方案1】:

如果您每次登录时都需要与用户一起处理 geoip 内容 - 创建方法并在用户登录时对其进行初始化 (1)。在其他选项中,我将使用选项 3 (Instantiate the geoip object outside of the FUSE model, but pass the object to a FUSE model setter which knows how to handle it.)。最好不要直接使用对象属性,而是设置一些方法来处理这些属性。

$user->setProperty('one'); // Actually can just execute `$user->property = $var;`

但不是

$user->property = 'one';

【讨论】:

Redbean ORM 库的使用更集中于直接设置属性,而不是需要创建 getter 和 setter,尽管可以选择创建它们。话虽如此,我也倾向于选项 3,因为 geoip 对象的任何新添加都可以容纳在一个地方。

以上是关于PHP ORM 最佳实践:从另一个对象类型中检索值:的主要内容,如果未能解决你的问题,请参考以下文章

[转]Android ORM系列之GreenDao最佳实践

最佳实践:通过存储在 DB 中的方案在运行时创建 ORM 对象

检索字典值最佳实践

轻量ORM-SqlRepoEx (十三)最佳实践

PHP MVC 最佳实践与 Doctrine 2

通过c#代码检索存储在sql表中的Json值的最佳实践