PHP MVC模型命名约定,单数/复数?
我想知道创建/命名模型的首选方法是什么 我的应用程序有一个“用户”模型,它包含用于创建、获取、更新(等等)用户记录的所有相关业务逻辑 在我的一些控制器中,我可能希望获取多个“用户”记录的列表 在这种情况下,我应该创建一个名为Users的全新模型吗 在我看来,有几种选择:PHP MVC模型命名约定,单数/复数?,php,naming-conventions,inflection,Php,Naming Conventions,Inflection,我想知道创建/命名模型的首选方法是什么 我的应用程序有一个“用户”模型,它包含用于创建、获取、更新(等等)用户记录的所有相关业务逻辑 在我的一些控制器中,我可能希望获取多个“用户”记录的列表 在这种情况下,我应该创建一个名为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()
returnUser[]
。就个人而言,我希望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()行集。这有什么问题吗?如果是,请让我知道