Php 使用doctrine2使模型在控制器中持久化,或使模型自身持久化
您好,我是一个新的信条主义者,我不知道在以下情况下该怎么办: 我有一个控制器,可以创建一个新的模型对象“Ad”。谁负责使该对象在数据库中持久化?。是因为它创建了控制器吗?还是模型本身 根据MVC,模型应该是唯一一个处理DB的人,所以我想我必须创建一个方法调用“persist”,或者创建一个名为model的接口,该接口将具有此方法,并将实体管理器注入每个模型的构造函数中,而不是使用控制器中的实体管理器使对象持久化 PD:我不想使用Zend、CI等任何框架Php 使用doctrine2使模型在控制器中持久化,或使模型自身持久化,php,model-view-controller,doctrine-orm,Php,Model View Controller,Doctrine Orm,您好,我是一个新的信条主义者,我不知道在以下情况下该怎么办: 我有一个控制器,可以创建一个新的模型对象“Ad”。谁负责使该对象在数据库中持久化?。是因为它创建了控制器吗?还是模型本身 根据MVC,模型应该是唯一一个处理DB的人,所以我想我必须创建一个方法调用“persist”,或者创建一个名为model的接口,该接口将具有此方法,并将实体管理器注入每个模型的构造函数中,而不是使用控制器中的实体管理器使对象持久化 PD:我不想使用Zend、CI等任何框架 谢谢大家! 控制器。当您的模型被验证/准备
谢谢大家! 控制器。当您的模型被验证/准备保存时。模型是一个层,而不是处理持久性的文件或类。持久性属于其中,但与您的域对象、服务、工厂以及您的应用程序所需的任何其他东西一起存在 控制器(和视图)是表示层的一部分,因此应仅负责与此相关的任务 如果您正在实现域对象,那么使用该模式来处理持久性通常是一个不错的选择。如果这样设置,那么对象本身根本不需要知道它们是否以及如何持久化。这使您的代码符合原则,并使其可测试 现在,您可以在控制器中使用数据映射器和域对象,但对于大多数应用程序来说,更好的解决方案是服务层。它将允许您在多个控制器中重用服务方法,并保留代码库。如果您有多个端点访问您的应用程序(想想普通的网站、管理区域、API等),这将特别有用 服务层类可以如下所示,例如:
namespace MyApp\Models;
class OrderService
{
public function getOrders($limit=null, $offset=null)
{
$orders = new OrderCollection;
$orders->setLimit($limit);
$orders->setOffset($offset);
$orderCollectionMapper = new OrderCollectionMapper;
$orderCollectionMapper->populate($orders);
return $orders;
}
}
有什么原因吗?因为控制器创建了对象,所以它负责保存它?您的控制器只能知道它想对给定模型做什么。