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或者其它用途打好基础。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了。因为它们都在逻辑上将应用程序划为三块,凑了一个数字...
    Ludiwgbet阅读 1,841评论 1 12
  • 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于App的架构...
    ppice阅读 4,264评论 2 17
  • 三层架构和MVC 三层架构 (3-tier application) 是将整个业务应用划分为:表现层(UI)、业务...
    hnscdg阅读 1,718评论 0 8
  • 我不知道接下来还会遇见怎样的人,但 我能肯定的是,无论对方是怎样的人, 他同样也渴望着我优秀、从容、美好。 所以我...
    小戴戴_阅读 101评论 0 0
  • d0c64a4bb843阅读 145评论 1 0