将集合检索方法添加到模型中

时间:2011-02-06 17:13:16

标签: php model oop

嘿 我在这里寻找一些建议,我有一个通常的保存,删除和查找方法的简单模型,但是想要创建一个getAll方法,感觉错误将它放在模型中因为它与实际无关模型。我应该用哪种方式设计呢?

我目前的型号如下:

<?php
class User {

    $id;
    $name;
    $address;

    public function __construct() {
        // do some constructor stuff    
    }

    public function save() {
        // insert into....  
    }

    public function delete() {
        // delete from user where ....
    }

    public function find($id) {
        // select * from user where ...     
    }
}
?>

非常感谢任何帮助, 感谢

3 个答案:

答案 0 :(得分:4)

嗯,在您拥有查找,创建和删除用户的方法后,没有什么可担心的。 在我看来,有两种方法

1)您可以以特殊方式使用find()方法,以获取所有用户(有点黑客)
2)您可以创建一个公共静态方法getAll()来完成这项工作(我认为它应该是静态的,因为getAll()与User对象的单个实例无关)

答案 1 :(得分:1)

在模型中使用getAll()方法实际上是标准做法。没有什么本质上有害的。

例如,在Zend Framework中,Zend_Db_Table_Abstract基类有一个内置的fetchAll()方法。 Codeigniter的内部ActiveRecord类实现get(),其行为类似。等

模型是一个比CRUD更广泛的概念,只要它们处理数据,方法的数量就不受限制。

答案 2 :(得分:1)

这取决于您的应用程序中的“模型” 如果它只是db表的表示,则可以将findAll()或getAll()方法添加到模型中 但如果它是实体类,它不应该知道数据源。您应该在应用中添加servicedata mappers图层 如果您的应用程序非常小并且其他图层会使其超载 - 只需使用active record模式。