现在人人都在谈论MVC,我注意到业务规则并没有得到关注。在旧的3层架构中,业务规则位于中间层。在新的MVC中它们属于哪一层?
现在人人都在谈论MVC,我注意到业务规则并没有得到关注。在旧的3层架构中,业务规则位于中间层。在新的MVC中它们属于哪一层?
你从来没有看到MVC涉及"业务规则"的原因是,MVC主要是一个表示层模式。它专注于如何组织应用程序。例如,可以将Model视为表示模型。你的应用程序模型,然后由View呈现。
然而,为了创建表示模型,通常需要访问包含所有业务逻辑的领域模型。此时,MVC并不指定代码物理位置。它是否位于另一个层中?MVC并不关心。
根据第一印象,我认为这些内容属于模型(Model)。维基百科上的MVC Entry也认同这个观点:"在MVC中,模型代表应用程序的信息(数据)以及用于操作数据的业务规则"。毕竟,我们所说的“业务规则”是指编码应用程序所涉及领域的功能算法和逻辑,而不是与输入/输出相关的逻辑。这些核心与业务相关的逻辑不应该因为展示给用户的内容(这是视图(View)的领域)或用户输入(主要由控制器(Controller)接收)而改变。
根据我的经验,在软件开发过程中问这种问题非常有启发性:我们发现许多人认为是“业务规则”的东西实际上并不是。如果它不是真正的业务规则,那么它可能不属于模型。
业务规则总是存在于模型中。模型是您可以在完全不同的UI上重用的部分。视图显然完全依赖于UI选择,控制器必须从模型中取数据并告诉视图进行渲染。
将业务逻辑放入视图中是不好的,因为它将结构与呈现绑定在一起。
将业务逻辑放入控制器中是不好的,因为它会将业务领域分成由模型持久化的数据和控制器的规则两部分。
你为什么不能混合使用MVC和N层架构?我们的应用程序就是这样做的。我们的控制器用于数据验证,并决定调用哪个业务层。
OurApp.Web - Asp.net MVC项目
OurApp.Business - 业务层库
OurApp.DataAccess - 数据层库
OurApp.Entities - 基本上是所有层共享的“模型”
业务规则应该在模型中,而不是控制器中。控制器和视图属于表示层。
模型代表领域实体和功能。
控制器只是一个管理器,用于接受用户输入和请求,在模型中执行操作,并将其映射到表示层的视图上。控制器不仅仅是一个中介者,视图或控制器都可以对模型进行操作。
我认为问题在于定义的问题。在我看来,按照所需顺序呈现屏幕的逻辑是控制器问题,我见过一些项目使用规则引擎确定顺序和用户所需输入。这与业务规则不同,在我看来。