我有两个问题:
Q1。“业务逻辑”在MVC模式中的具体位置是什么?我分不清模型和控制器。
Q2。“业务逻辑”与“业务规则”相同吗?如果不是,有什么区别?
如果你能用一个小例子来解释就太好了。
我有两个问题:
Q1。“业务逻辑”在MVC模式中的具体位置是什么?我分不清模型和控制器。
Q2。“业务逻辑”与“业务规则”相同吗?如果不是,有什么区别?
如果你能用一个小例子来解释就太好了。
当前回答
这是一个已回答的问题,但我将给出我的“一分钱”:
业务规则属于模型。 “模型”总是由(逻辑上或物理上分离的):
表示模型——一组非常适合在视图中使用的类(它针对特定的UI/表示进行定制), 域模型——模型中与ui无关的部分,以及 存储库——“模型”的存储感知部分。
业务规则存在于领域模型中,以适合表示的形式公开给“表示”模型,有时在“数据层”中复制(或强制执行)。
其他回答
将业务层放在MVC项目的模型中是没有意义的。
假如你的老板决定把演示层换成别的东西,你就完蛋了!业务层应该是一个单独的程序集。Model包含来自业务层的数据,这些数据传递给视图进行显示。然后在post中,例如,模型绑定到驻留在业务层的Person类,并调用PersonBusiness.SavePerson(p);其中p是Person类。以下是我所做的(BusinessError类没有,但也会在BusinessLayer中):
这是一个已回答的问题,但我将给出我的“一分钱”:
业务规则属于模型。 “模型”总是由(逻辑上或物理上分离的):
表示模型——一组非常适合在视图中使用的类(它针对特定的UI/表示进行定制), 域模型——模型中与ui无关的部分,以及 存储库——“模型”的存储感知部分。
业务规则存在于领域模型中,以适合表示的形式公开给“表示”模型,有时在“数据层”中复制(或强制执行)。
为什么不引入一个服务层呢?这样你的控制器就会精简,可读性更强,所有的控制器功能都是纯粹的动作。您可以根据需要在服务层中分解业务逻辑。代码可重用性很高。对模型和存储库没有影响。
Model =用于CRUD数据库操作的代码。
Controller =响应用户操作,并根据特定于组织的业务规则将用户的数据检索或删除/更新请求传递给模型。这些业务规则可以在助手类中实现,如果不是太复杂的话,也可以直接在控制器操作中实现。控制器最后要求视图更新自己,以便以新显示的形式给用户反馈,或者像'updated, thanks'之类的消息,
View =基于对模型的查询生成的UI。
关于业务规则应该放在哪里,没有硬性规定。在一些设计中,它们进入模型,而在另一些设计中,它们包含在控制器中。但我认为最好还是把它们放在控制器里。让模型只关心数据库连通性。
正如几个答案所指出的,我相信人们对多层架构和MVC架构有一些误解。
多层架构包括将你的应用程序分解成几层(例如,表示、业务逻辑、数据访问)
MVC是应用程序表示层的一种体系结构样式。对于重要的应用程序,业务逻辑/业务规则/数据访问不应该直接放在模型、视图或控制器中。这样做会将业务逻辑放在表示层,从而降低代码的重用性和可维护性。
该模型是放置业务逻辑的一个非常合理的选择,但更好/更可维护的方法是将表示层与业务逻辑层分离,并创建一个业务逻辑层,并在需要时从模型中调用业务逻辑层。业务逻辑层将依次调用数据访问层。
我想指出的是,在一个MVC组件中发现混合了业务逻辑和数据访问的代码并不少见,特别是在应用程序没有使用多层架构的情况下。然而,在大多数企业应用程序中,您通常会在表示层中发现带有MVC体系结构的多层体系结构。