PHP MVC模型命名约定,单数/复数



我想知道创建/命名模型的首选方法是什么?

我的应用程序有一个"User"模型,它包含了创建、获取、更新(等等)User记录的所有相关业务逻辑。

在我的一些控制器中,我可能想要获取多个"User"记录的列表。

在这种情况下,我是否应该创建一个名为Users的全新模型?

在我看来,有几个选项:

  1. 我可以给控制器数据库访问权,控制器可以查询所有相关的用户,然后在我循环它们时创建一个User模型对象。(坏的管理者)

  2. 我可以有两个单独的模型,"用户"one_answers"用户"。User对象将处理创建、获取和更新单个记录,而Users对象实际上只对列出所有User记录有用。

我不喜欢做这样的事情。

$user = new User();
$user->fetchAll();

纯粹出于语义原因。在我看来,一个User对象应该只与一个用户记录相关。

也许我想错了,我的"User"模型,它与数据库中的"users"表相关,从一开始就应该被命名为"users"。

你如何处理这个问题?

嗯,我猜只是试着保持一致…对于我来说,我将使用User模型与表User交互,所以我并不真正关心我将与多少记录交互。

检查这个问题:要建立一个php MVC,我需要知道什么命名约定?

您不需要一个单独的模型来表示单数或复数版本。要么选一个,要么选另一个。你可以有一个用户实例的集合,但那是一个集合(数组),而不是一个"Users"类。

你可以在语义上给你的模型取任何你想要的名字,但是单数似乎是被接受的标准。

基本上,您应该考虑的方式是用户模型代表单个"用户",因此用户服务/存储库的findAll方法应该返回单个用户实体/模型的集合/数组。

我想你的想法是对的。为了保持单一的职责,您的User()类不应该涉及表的获取和更新。它应该只代表一个用户,它的功能应该直接与之相关。如果你开始将User()函数和表的函数混合在一起,你就打破了单一职责。出于这个原因,我采用第二种方法,这就是它在我使用过的框架中的工作方式

在Zend框架中,扩展Zend_Db_Table的类处理表操作,返回扩展Zend_Db_Table_Row的类。在Zend框架中,Zend_Db_Table_Rowsavedelete方法,它们回调表来执行实际的保存和删除操作。我认为这与歌唱责任是一致的,因为你认为责任直接与行有关,而不仅仅是与行分离的一个模型。你仍然有两门课。表类和行类

在Doctrine中(我是新手,所以我不熟悉高级用法),每个模型代表表中的一行,甚至可以定义行中的哪些列。这些行由Doctrine Repository获取、更新和创建。如果你只需要一个Table的存储库,那么你可以这样做,但它是User()

的一个单独的类。

总而言之,为了与单一责任保持一致,我将UsersTable()::fetchAll()返回User[]。就我个人而言,我希望User能够调用UsersTable来更新或删除行,但这只是个人偏好。

这几天我一直为同一件事绞尽脑汁。

我自己更喜欢保持一个类,但我想这是OOP可能受到稍微限制的地方。

我想说,如果你只想要一个类,那么我会选择复数,因为它没有语义意义的一个用户返回多个用户,

我知道这个问题已经有人回答了,但是我还是要贡献我的意见:

class UserModel
{
    /**
    * @var $user
    */
    public $user;
    function __construct()
    {
    }
    public function get_all()
    {
         //Get all products
    }
    public function get($where)
    {
         //Get user instance here either by:
         $this->user = $result; //Result from SQL Row
         //or:
         return new User($result);
    }
}
class User
{
    public $firstname;
    public $lastname;
    public $somevar;
}

最新更新