MVC与三层架构:2018-05-08

近期研究了两个项目:一个是java的嗨购网上商城实战,一个是廖雪峰的blog python实战,对web开发框架有了一个大致的了解,几个框架类的问题,记录一下:

MVC与常说的三层架构的关系:

三层架构:界面表示层UI、业务逻辑层BLL、数据访问层DAL等
MVC:Model-View-Controller

答案1:

同样是架构级别的,它们有什么相同点和不同点呢?这篇文章讨论一下它们的异同点。希望能帮助读者理解其中的玄机。 :)

其实它们相同的地方在于他们都有一个表现层。

但是他们不同的地方在于其他的两个层。

首先先解释一下MVC。V即View.是视图的意思。C即Controler.是控制器的意思。而M即Model,是模型的意思。这三个里.最不容易理解的应该是Model.就是什么是Model,而为什么叫Model。我先不说为什么叫Model,先解释Controler。

Controller是控制器的意思,所谓控制器,就是将用户请求转发给模型层,经过处理后把结果返回到界面展现的一个中间层,那么Controler到底管什么工作呢?先不说.先来看下在Java Web中这三个层一般的定义,一般在Java Web里,JSP充当V,Servlet充当C,JavaBean充当M,这里的Servlet管什么工作呢?接受输入,转到Model层去处理,处理结果保存后转发到JSP,然后展现数据。所以它的功能就是控制器的基本功能,它就管转发,在V和M之间转来转去。

再来说说M,即Model,在Java Web里说的是JavaBean,我认识的很多人都把JavaBean误认为是实体类,其实JavaBean有比实体类更丰富的定义,在JavaBean中除了其属性和字段,还可以有行为及其事件,JavaBean可以理解为普通Java对象。Java普通对象,就是符合Java规范的所有对象,这和实体类完全是两回事。所以,我认为在MVC中。业务逻辑和数据访问应该放在Model层,也就是V负责展示数据,Controler除了转发不做业务逻辑。真正的逻辑事务,数据访问,甚至算法都放到Model去。

再说三层架构。三层其实很好理解,界面,业务,数据访问,就这三个,从字面都可以理解出它们的意思。我要说的是它和MVC的区别。在三层架构中没有定义Controler的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。

当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是已实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。不一样的概念。虽然名字一样。
引自:
http://www.blogjava.net/phyeas/archive/2008/07/01/211995.html

答案2:

知乎的高票答案:

  • 做企业应用开发时,经常采用三层架构分层:表示层、业务层、持久层。表示层负责接收用户请求、转发请求、显示数据等;业务层负责组织业务逻辑;持久层负责持久化业务对象。
    这三个分层,每一层都有不同的模式,就是架构模式。表示层最常用的架构模式就是MVC。

  • 框架 > 架构模式> 设计模式 > 设计原则:
    打个比方,Hibernate是一个持久层框架,是数据映射器模式的具体实现,实现时用到了工厂模式等很多设计模式,体现了什么依赖倒转原则、开闭原则、里氏替换原则等等设计原则。AngularJS是一个客户端 MVC 框架,是 MVC架构模式的一种实现,实现时用到。。。。设计模式,体现了。。。。等设计原则。Struts/http://ASP.NET MVC是表示层框架。。。。。诸如此类。

作者:知乎用户
链接:https://www.zhihu.com/question/24291079/answer/27339010
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

做企业应用开发时,经常采用三层架构分层:表示层、业务层、持久层。表示层负责接收用户请求、转发请求、显示数据等;业务层负责组织业务逻辑;持久层负责持久化业务对象。

这三个分层,每一层都有不同的模式,就是架构模式。表示层最常用的架构模式就是MVC。

因此,MVC是三层架构中表示层最常用的架构模式。

参见《企业应用架构模式》-Martin Flower.

=========================================
这话题,其实十年前Java 社区都已经讨论烂了。。。此外,《企业应用架构模式》、《领域驱动设计》、《Pojos in action》、《J2EE 核心模式》等等经典书籍上已经讲的足够清楚了。大师们的书虽说老了点,过时了点,但是是值得精读的,咱能不能别自己随意发明名词。。。。

MVC - 模型、视图、控制器。总有人来个什么模型层、视图层、控制器层,哪里来的这么多层?是不是还要来个Service层、DAO层、DTO 层?

层,英文是tier(物理上)、layer(逻辑上)。既是层,个人理解就有上下关系,模型、视图、控制器有上下关系?否则,依赖倒转原则(高层不依赖于低层,二者都依赖于抽象)指的是啥?

三层架构,每层都有自己的模式,模式就是套路(杨氏太极拳十八式,就是套路),每一层都有自己的套路,就是所谓架构模式。

表示层最常用的套路、模式就是MVC ,MVC就是表示层的一种架构模式。
业务层的架构模式有事务脚本模式、领域模型模式、CQRS 等等(另一种说法是贫血、失血、充血、胀血...)。
持久层的架构模式有入口模式、数据映射器模式等等。

一般来说,框架 > 架构模式> 设计模式 > 设计原则。打个比方,Hibernate是一个持久层框架,是数据映射器模式的具体实现,实现时用到了工厂模式等很多设计模式,体现了什么依赖倒转原则、开闭原则、里氏替换原则等等设计原则。AngularJS是一个客户端 MVC 框架,是 MVC架构模式的一种实现,实现时用到。。。。设计模式,体现了。。。。等设计原则。Struts/[http://ASP.NET](https://link.zhihu.com/?target=http%3A//ASP.NET) MVC是表示层框架。。。。。诸如此类。

嗯,一定有人会说:这些都不重要,写出代码才是王道。一个人一个说法,初学者岂不是无所适从?看看大师们的书总是要安全些。

具体参见下面这个说法:
https://blog.csdn.net/csh624366188/article/details/7183872

MVC中,业务逻辑处理放在C层还是M层?

你看下企业应用架构模式, pojo in action这两本书,martin fowler提出的领域设计模式。mvc只是初期阶段,当业务一多,你就需要剥离业务逻辑到业务层,controller里只是控制业务和界面的流转,真正核心代码应该是与具体框架尽可能无关的,这样将来上web service或者其它用途打好基础。

你可能感兴趣的:(MVC与三层架构:2018-05-08)