5

刚开始研究mvc,还不确定我是否掌握它。据我所知,它似乎是一个 3 层解决方案的实现,即模型对应于 DAL,控制器对应于业务逻辑层,视图作为表示层。

我在这里离基地很远吗?

4

4 回答 4

8

我告诫不要将模型视为简单的数据访问层。这过于简单化了,它会导致您将过多的代码放入控制器层。最好将更多的代码放在模型中,并使数据库持久性仅是模型内部代码的一部分。我喜欢这样想 MVC:

  • Controller:处理输入,确定要实例化哪个Model和哪个View
  • 视图:应用程序数据的呈现
  • 模型:应用程序的所有其他逻辑,包括但不限于 DAL

这基本上是页面控制器模式。

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

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

阅读有关 Martin Fowler 的贫血域模型反模式或域驱动设计的信息,以获取其他一些观点。

另请参阅我在 2008 年写的博客,以回应人们谴责 Active Record 模式。它得到了一些很好的评论和讨论。

于 2009-11-18T05:12:42.203 回答
3

有点。它看起来像这样:

替代文字

今天最常用的模式是:

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

在哪里

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

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

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

于 2009-11-18T04:58:37.460 回答
1

如果您是 MVC 新手,这里有一些很好的解释:

我旁边的任何人都没有获得 ASP.NET MVC 吗?

于 2009-11-18T04:58:58.750 回答
0

简短的说明,当您说控制器可以(不一定)是业务层,而视图是表示层时,您是正确的。

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

于 2009-11-18T05:09:51.683 回答