Model view controller 业务逻辑存在于模型中还是控制器中?
在阅读之后,我仍然不知道我想把计算折扣的代码放在哪里。我认为计算产品或服务的折扣价格肯定是业务逻辑的一部分,而不是应用程序路由或数据库交互的一部分。因此,我很难将我的业务逻辑放在哪里 范例Model view controller 业务逻辑存在于模型中还是控制器中?,model-view-controller,mvvm,business-logic,Model View Controller,Mvvm,Business Logic,在阅读之后,我仍然不知道我想把计算折扣的代码放在哪里。我认为计算产品或服务的折扣价格肯定是业务逻辑的一部分,而不是应用程序路由或数据库交互的一部分。因此,我很难将我的业务逻辑放在哪里 范例 类模型 { 公共功能存储服务($options) { $serviceId=$options['service_id']; //模型从数据库中读取“行项” $service=$this->entityManager->find('Entity\ServiceLineItem',$serviceId); //使
类模型
{
公共功能存储服务($options)
{
$serviceId=$options['service_id'];
//模型从数据库中读取“行项”
$service=$this->entityManager->find('Entity\ServiceLineItem',$serviceId);
//使用数据计算折扣
//但是等等,模型不应该只做积垢吗?
//这个计算不应该在控制器中吗?
$折扣=($service->getUnitPrice()*0.25);
//添加行项目
$item=新的SalesItem();
$item->setDiscount($discount);
}
}
类控制器
{
函数save()
{
$this->model->saveService($options);
}
}
问题:
上面的$discount
计算,它应该留在模型中,还是进入控制器?如果它进入控制器,控制器必须首先调用$service
(通过模型),然后在控制器内计算$discount
,然后将值发送回要保存的模型。这样做吗
注
我可能把模型和“存储”混淆了。我可能需要一个模型来处理业务逻辑,数据库/持久性存储应该是一个单独的层。我使用MVC使用了一个名为“Yii framework”的框架,它在控制器中有一个名为beforeSave()的函数,用于在保存模型值之前更改模型值
遵循这一逻辑,最好的做法可能是在保存模型(在控制器中)之前对价格应用折扣。我使用MVC使用了一个名为“Yii framework”的框架,它在控制器中有一个名为beforeSave()的函数,用于在保存模型值之前更改模型值
遵循此逻辑,最佳做法可能是在保存模型(在控制器中)之前对价格应用折扣。关于如何将业务逻辑与数据分离的问题不容易回答。然而,Daniel Rocco构建了一个框架,如果不是针对这个特定的问题,您可能会发现它对构建一般的业务应用程序很有帮助。关于如何将业务逻辑与数据分离的问题不容易回答。然而,Daniel Rocco构建了这样一个概念:如果不是针对这个特定的问题,您可能会发现它对构建一般的业务应用程序很有帮助。回答这样的问题通常是自以为是的,或者可以说这真的取决于您的业务用例 首先,我感觉到您的
模型
和服务
措辞有些混乱。
模型
应该是您的域模型
,服务
应该是域
或应用程序服务
,位于不同的类别或不同的层
从架构上考虑,您可以遵循一个相当简化的实现
即:
要通过长期维护代码来实现更干净的体系结构和更少的痛苦,请不要忘记思考设计模式如何帮助您针对给定的业务用例实现解决方案。回答这样的问题通常是自以为是的,或者说这真的取决于您的业务用例 首先,我感觉到您的
模型
和服务
措辞有些混乱。
模型
应该是您的域模型
,服务
应该是域
或应用程序服务
,位于不同的类别或不同的层
从架构上考虑,您可以遵循一个相当简化的实现
即:
要通过长期维护代码来实现更干净的体系结构和更少的痛苦,请不要忘记考虑设计模式如何帮助您实现针对给定业务用例的解决方案。业务逻辑属于服务,因此您需要添加服务层 业务逻辑往往跨越多个模型,这意味着它不属于任何单个模型。因此,不清楚应该将逻辑放在哪个模型中 输入服务类。 我倾向于为每次使用都提供服务