我有两个问题:
Q1。“业务逻辑”在MVC模式中的具体位置是什么?我分不清模型和控制器。
Q2。“业务逻辑”与“业务规则”相同吗?如果不是,有什么区别?
如果你能用一个小例子来解释就太好了。
我有两个问题:
Q1。“业务逻辑”在MVC模式中的具体位置是什么?我分不清模型和控制器。
Q2。“业务逻辑”与“业务规则”相同吗?如果不是,有什么区别?
如果你能用一个小例子来解释就太好了。
当前回答
为什么不引入一个服务层呢?这样你的控制器就会精简,可读性更强,所有的控制器功能都是纯粹的动作。您可以根据需要在服务层中分解业务逻辑。代码可重用性很高。对模型和存储库没有影响。
其他回答
业务规则在模型中。
假设您正在为邮件列表显示电子邮件。用户单击其中一封电子邮件旁边的“删除”按钮,控制器通知模型删除条目N,然后通知视图模型已更改。
也许管理员的电子邮件永远不应该从列表中删除。这是一个业务规则,该知识属于模型。视图最终可能以某种方式表示该规则——也许模型公开了一个“IsDeletable”属性,该属性是业务规则的一个功能,因此视图中的删除按钮对于某些条目是禁用的——但视图中不包含规则本身。
模型是数据的最终把关人。您应该能够在不接触UI的情况下测试业务逻辑。
这是一个已回答的问题,但我将给出我的“一分钱”:
业务规则属于模型。 “模型”总是由(逻辑上或物理上分离的):
表示模型——一组非常适合在视图中使用的类(它针对特定的UI/表示进行定制), 域模型——模型中与ui无关的部分,以及 存储库——“模型”的存储感知部分。
业务规则存在于领域模型中,以适合表示的形式公开给“表示”模型,有时在“数据层”中复制(或强制执行)。
A1:业务逻辑进入MVC的模型部分。Model的作用是包含数据和业务逻辑。另一方面,控制器负责接收用户输入并决定要做什么。
A2:业务规则是业务逻辑的一部分。他们有一种关系。业务逻辑具有业务规则。
看看维基百科中关于MVC的条目。转到概览,其中提到MVC模式的流程。
还可以查看维基百科中的Business Logic条目。上面提到,业务逻辑由业务规则和工作流组成。
在我看来,业务逻辑这个术语并不是一个精确的定义。Evans在他的书《领域驱动设计》中谈到了两种类型的业务逻辑:
域逻辑。 应用程序逻辑。
在我看来,这种分离要清楚得多。在认识到有不同类型的业务规则的同时,也认识到它们不一定都去同一个地方。
域逻辑是对应于实际域的逻辑。因此,如果您正在创建一个会计应用程序,那么域规则将是关于帐户、发帖、税收等的规则。在一个敏捷的软件计划工具中,规则是像基于速度和backlog中的故事点计算发布日期之类的东西。
对于这两种类型的应用程序,CSV导入/导出可能是相关的,但CSV导入/导出的规则与实际域无关。这种逻辑就是应用逻辑。
领域逻辑肯定会进入模型层。该模型还对应于DDD中的领域层。
然而,应用程序逻辑并不一定要放在模型层中。这些规则可以直接放在控制器中,也可以创建一个单独的应用程序层来承载这些规则。在这种情况下,什么是最合乎逻辑的取决于实际的应用程序。
为什么不引入一个服务层呢?这样你的控制器就会精简,可读性更强,所有的控制器功能都是纯粹的动作。您可以根据需要在服务层中分解业务逻辑。代码可重用性很高。对模型和存储库没有影响。