Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MVC模型命名约定,单数/复数?_Php_Naming Conventions_Inflection - Fatal编程技术网

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

PHP MVC模型命名约定,单数/复数?,php,naming-conventions,inflection,Php,Naming Conventions,Inflection,我想知道创建/命名模型的首选方法是什么 我的应用程序有一个“用户”模型,它包含用于创建、获取、更新(等等)用户记录的所有相关业务逻辑 在我的一些控制器中,我可能希望获取多个“用户”记录的列表 在这种情况下,我应该创建一个名为Users的全新模型吗 在我看来,有几种选择: 我可以向控制器提供数据库访问权限,控制器可以查询所有相关用户,然后在我循环遍历这些用户时创建一个用户模型对象。(坏) 我可以有两个独立的模型,“用户”和“用户”。用户对象将处理单个记录的创建、获取和更新,而用户对象实际上只对列出

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

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

在我的一些控制器中,我可能希望获取多个“用户”记录的列表

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

在我看来,有几种选择:

  • 我可以向控制器提供数据库访问权限,控制器可以查询所有相关用户,然后在我循环遍历这些用户时创建一个用户模型对象。(坏)

  • 我可以有两个独立的模型,“用户”和“用户”。用户对象将处理单个记录的创建、获取和更新,而用户对象实际上只对列出所有用户记录有用

  • 我不喜欢这样做的想法:

    $user = new User();
    $user->fetchAll();
    
    纯粹出于语义原因。在我看来,一个用户对象应该只与一个用户记录相关

    也许我的想法是错误的,我的“用户”模型(与数据库中的“用户”表相关)从一开始就应该被命名为“用户”


    你是如何处理这个问题的?

    嗯,我想还是保持一致吧。。 对我来说,我将使用用户模型与表用户交互,所以我并不真正关心将与多少条记录交互


    检查这个问题:

    我认为你的想法是正确的。为了维护单一责任,您的
    User()
    类不应参与表的获取和更新。它应该只代表一个用户,它的功能应该与此直接相关。如果您开始将
    User()
    函数和表的函数混合在一起,您就打破了单一责任。出于这个原因,我采用第二种方法,在我使用过的框架中,它似乎就是这样工作的

    在Zend框架中,扩展
    Zend\u Db\u Table
    的类处理表操作,并返回扩展
    Zend\u Db\u Table\u行的类。在Zend Framework中,
    Zend\u Db\u Table\u Row
    有一个
    save
    delete
    方法,该方法调用该表来执行实际的保存和删除操作。我认为这与歌唱责任保持一致,因为你认为有责任直接处理这一行,而不仅仅是一个与该行分离的模型。不过,你还有两门课。表类和行类

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


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

    您不需要单独的模型来表示单个或多个版本。就一个或另一个。您可以拥有用户实例的集合,但这是一个集合(数组),而不是“用户”类

    你可以在语义上随意调用你的模型,但单数似乎是公认的标准


    基本上,您应该这样认为,一个用户模型代表一个“用户”,因此您的用户服务/存储库的findAll方法应该返回一个单一用户实体/模型的集合/数组。

    过去几天来,我一直在为同一件事头痛

    我宁愿自己保留一个类,但我想这是OOP可以稍微受到限制的地方

    我会说,如果你只需要一个类,那么我会用复数,因为一个用户返回多个用户在语义上没有意义

    我知道这已经得到了回答,但我将贡献我的2美分:

    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;
    }
    

    模型是奇异的。因为每个应用程序只有一个。这是一层。对于“模型”,您可能指的是域对象的类型和集合。可能有用。对不起,我想我是这么说的。Users()或UsersTable()扩展Zend_Db_Table,fetchAll()或fetchRow()返回扩展Zend_Db_Table_行的User()行集。这有什么问题吗?如果是,请让我知道