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

fie*_*ish 5 asp.net-mvc 3-tier separation-of-concerns

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

我离开基地吗?

Bil*_*win 8

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

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

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

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

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

快速了解Martin Fowler的Anemic Domain Model反模式或域驱动设计以获得其他一些观点.

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