1

我正在学习 OOPHP,我正在寻找一些“最佳实践”的建议。

对于关系数据库,许多表中显然存在外键。当我为我的站点创建模型时,我试图确定在模型中进行 JOIN 查询是否更好,或者让一个模型调用另一个模型?

调用其他模型似乎使代码更加模块化。无论是在另一个表上还是在另一个模型上,这两种方式似乎都会产生依赖关系。

如果我采用“调用其他模型”的方法,我似乎遇到了另一个问题:无限循环。这是我遇到的例子。我有 2 张桌子,person并且school. 每个person人都有一个最喜欢的学校,用 . 表示schoolId。每个school都有一个principal,那就是一个personId

person行映射到的对象在其构造函数中接受对象school,但school学校行映射到的person对象在其构造函数中接受对象。

根据我的发现,延迟加载似乎是解决方案,但是(我可能是错的)如果我这样做,我似乎不能使用 PHP 的类型提示。

(我猜很多人会向我推荐像 Doctrine 这样的 ORM 工具,这是我将来肯定会研究的东西。我现在正在避免它,因为它被认为是陡峭的学习曲线,而且因为我觉得我更了解这些工具以后如果我自己尝试一次)

4

1 回答 1

0

好问题!我有/有同样的想法。而且我认为在查看框架之前开始自己编写代码是一个非常好的主意:)

当我编写模型生成器时,我曾决定不使用 JOINS 并使用“延迟加载”。意思是我有这样的类(只是伪代码):

class Person extends Model_Resource {

    /**
     *
     */
    protected $name;

    /**
     * @var Address <-- external reference
     */
    protected $address;

    /**
     * @return Person
     */
    public static function select($filter) {
        return DB::instance(filter_query('SELECT * FROM `person`', $filter));
    }


    /**
     * @return Address
     */
    public function getAddress() {
        // lazy loading :
        if(is_null($this->address)) {
            $this->address = Address::select(new Filter('p_id', $this->id));
        }
        return $this->address;
    }

}

多年来,这对我来说在中等规模的应用程序中效果很好。当我真的需要加快速度或使用有点不规则的查询时,我可以自由地覆盖自动生成的方法并使用 JOINS、UNION 等......

我很好奇别人会怎么说。

于 2013-02-04T19:23:28.113 回答