当我昨天问一个关于单数/复数模型命名约定的问题时,我遇到了域模型的概念.据我所知,到目前为止,域模型只是一个对象,它代表了我的应用程序中的一个实体.
要使用一个非常简单的示例,请执行以下操作:
class User {
private $name;
public setName() {}
public getName() {}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想到了这个问题,我如何从一些输入源,从数据库或数据源填充这个"域模型"?
在阅读关于域模型的过程中,我得到的印象是,在它们内部应该只有一个表示域概念的表示.所以现在我还需要另一个负责与数据源交互的类(DAO?),在这种情况下是一个名为"User"的数据库表.我的DAO类将处理插入,更新,删除和多次提取.
我想出了这种方法从输入填充用户域模型,在这种情况下发布数据,然后使用UserDAO类将记录保存到数据库:
/**
* Populating Domain Model from input, and saving to database
*/
/** Instantiate User Domain Model, and populate it from input */
$user = new User();
$user->setName($_POST['name']);
/** Creating a new database record from User Domain Model */
$userdao = new UserDAO($pdo);
$userdao->insert($user);
Run Code Online (Sandbox Code Playgroud)
这是我在需要获取数据时预期与数据库交互的方式,在这种情况下是多个用户记录:
/**
* Fetching data from database to populate User Domain Models in an array
*/
/** Instantiate new …
Run Code Online (Sandbox Code Playgroud) 我想知道创建/命名模型的首选方法是什么?
我的应用程序有一个“用户”模型,其中包含用于创建、获取、更新(等)用户记录的所有相关业务逻辑。
在我的一些控制器中,我可能想要获取多个“用户”记录的列表。
在这种情况下,我应该创建一个名为“用户”的全新模型吗?
在我看来,有以下几种选择:
我可以向控制器提供数据库访问权限,控制器可以查询所有相关用户,然后在我循环访问它们时创建一个用户模型对象。(坏的)
我可以有两个单独的模型,“用户”和“用户”。User 对象将处理创建、获取、更新单个记录,而 Users 对象实际上只对列出所有用户记录有用。
我不喜欢做这样的事情的想法:
$user = new User();
$user->fetchAll();
Run Code Online (Sandbox Code Playgroud)
纯粹出于语义原因。在我看来,一个 User 对象应该只与一个用户记录相关。
也许我的思考方式是错误的,我的“用户”模型与数据库中的“用户”表相关,实际上应该从一开始就被命名为“用户”。
您如何处理这个问题?