MVC - 它只是一个3层模型吗?

时间:2009-11-18 04:54:10

标签: asp.net-mvc separation-of-concerns 3-tier

刚开始研究mvc,我还不确定是否已经掌握了它。从我收集的内容看来,它似乎是一个3层解决方案的实现,即模型对应于DAL,Controller对应于业务逻辑层,以及View作为表示层。

我离开基地了吗?

4 个答案:

答案 0 :(得分:8)

我提醒不要将模型简单地视为数据访问层。这过于简单化,导致您将太多代码放入控制器层。如果将更多代码放在Model中,并使数据库持久性只是Model内部代码的一部分,那就更好了。我喜欢这样想MVC:

  • 控制器:处理输入,确定要实例化的模型和视图
  • 查看:申请数据的介绍
  • 模型:应用程序的所有其他逻辑,包括但不限于DAL

这基本上是Page Controller模式。

另一种思考方式是:假设您必须将Web应用程序移植到另一个平台,例如命令行应用程序或桌面GUI应用程序。您应该重用哪些应用程序逻辑部分?当您将应用程序移植到另一个平台时,Controller和View会发生变化,因为输入和输出的实现都需要更改。不需要更改的代码应该在您的模型中实现。

如果你已经完成了关注点的分离,那么模型,视图和控制器将是最小耦合的,你可以改变一个的实现而不会过多地影响其他的。如果更改模型并发现自己在Controller或View中重写了大量代码,则可能没有充分分离这些层。反之亦然。

了解Martin Fowler的Anemic Domain Model反模式或Domain Driven Design Quickly以获得其他观点。

另请参阅我为响应人们谴责Active Record模式而写的blog from 2008。它得到了一些很好的评论和讨论。

答案 1 :(得分:3)

排序。它看起来像这样:

alt text

今天最常用的模式是:

Database -> DAL -> BLL -> Controller -> View Model -> UI

其中

DAL == Data Access Layer (aka ORM, Object-Relational mapper)
BLL == Business Logic Layer

请注意,您并不总是需要每一层。例如,如果应用程序足够小,BLL和视图模型可以是可选的。

您应该查看NerdDinner tutorial.它在一个参考文献中描述了所有这些概念。

答案 2 :(得分:1)

如果你是MVC的新手,可以在这里做一些很好的解释:

Does anyone beside me just NOT get ASP.NET MVC?

答案 3 :(得分:0)

简短说明,当你说Controller可以(不一定)是业务层,并且视图是表示层时,你是对的。

然而,模型是包含数据的对象(取决于实现),而数据层是检索/操作数据的层。