gpt4 book ai didi

model-view-controller - 业务逻辑是存在于模型中还是存在于 Controller 中?

转载 作者:行者123 更新时间:2023-12-03 10:20:10 43 4
gpt4 key购买 nike

阅读后https://softwareengineering.stackexchange.com/questions/165444/where-to-put-business-logic-in-mvc-design/165446#165446 ,我仍然对我想把计算折扣的代码放在哪里感到困惑。我认为计算产品或服务的折扣价格绝对是业务逻辑的一部分,而不是应用程序路由或数据库交互的一部分。有了这个,我正在努力将我的业务逻辑放在哪里。

例子

class Model
{
public function saveService($options)
{
$serviceId = $options['service_id'];

//Model reads "line Item" from database
$service = $this->entityManager->find('Entity\ServiceLineItem', $serviceId);
//uses the data to compute discount
//but wait.. shouldn't model do CRUD only?
//shouldn't this computation be in Controller?
$discount = ($service->getUnitPrice() * 0.25);

// Add the line item
$item = new SalesItem();
$item->setDiscount($discount);
}
}


class Controller
{
function save()
{
$this->model->saveService($options);
}
}

题:

以上 $discount计算,它应该留在模型中,还是进入 Controller ?如果它进入 Controller , Controller 必须调用 $service (通过模型)首先,然后计算 $discount然后在 Controller 内部将值发送回要保存的模型。这是这样做的方式吗?

笔记

我可能会将模型与“存储”混淆。我可能需要一个模型来处理业务逻辑,而数据库/持久存储应该是一个单独的层。

最佳答案

业务逻辑属于一个服务,因此您需要添加一个服务层。
业务逻辑往往跨越多个模型,这推断它不属于任何单个模型。因此,不清楚应该将逻辑放在哪个模型中。
输入服务类。
我倾向于为软件设计的每个用例提供服务。
在你的情况下可能有 CheckOutService这将计算您的总金额,包括折扣。
这样,每项服务都有特定且直观的目的。然后,当 Controller 需要一些业务逻辑时,它会调用专为此目的量身定制的服务。
可以在此处找到对服务在 MVC 模式中的作用的良好描述:
MVCS - Model View Controller Service
我将引用最重要的部分:

The service layer would then be responsible for:

  • Retreiving and creating your 'Model' from various data sources (or data access objects).
  • Updating values across various repositories/resources.
  • Performing application specific logic and manipulations, etc.

编辑:我刚看到 kayess回答。我会说他的回答比我的更准确,但考虑到您问题的不确定性,我不知道它的相关性如何。所以我希望我的可以帮助一些处于编程生涯早期阶段的人。

关于model-view-controller - 业务逻辑是存在于模型中还是存在于 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33113754/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com