刚开始研究mvc,我还不确定是否已经掌握了它。从我收集的内容看来,它似乎是一个3层解决方案的实现,即模型对应于DAL,Controller对应于业务逻辑层,以及View作为表示层。
我离开基地了吗?
答案 0 :(得分:8)
我提醒不要将模型简单地视为数据访问层。这过于简单化,导致您将太多代码放入控制器层。如果将更多代码放在Model中,并使数据库持久性只是Model内部代码的一部分,那就更好了。我喜欢这样想MVC:
这基本上是Page Controller模式。
另一种思考方式是:假设您必须将Web应用程序移植到另一个平台,例如命令行应用程序或桌面GUI应用程序。您应该重用哪些应用程序逻辑部分?当您将应用程序移植到另一个平台时,Controller和View会发生变化,因为输入和输出的实现都需要更改。不需要更改的代码应该在您的模型中实现。
如果你已经完成了关注点的分离,那么模型,视图和控制器将是最小耦合的,你可以改变一个的实现而不会过多地影响其他的。如果更改模型并发现自己在Controller或View中重写了大量代码,则可能没有充分分离这些层。反之亦然。
了解Martin Fowler的Anemic Domain Model反模式或Domain Driven Design Quickly以获得其他观点。
另请参阅我为响应人们谴责Active Record模式而写的blog from 2008。它得到了一些很好的评论和讨论。
答案 1 :(得分:3)
排序。它看起来像这样:
今天最常用的模式是:
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的新手,可以在这里做一些很好的解释:
答案 3 :(得分:0)
简短说明,当你说Controller可以(不一定)是业务层,并且视图是表示层时,你是对的。
然而,模型是包含数据的对象(取决于实现),而数据层是检索/操作数据的层。