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

企业应用开发时,经常采用三层架构分层:表示层、业务层、持久层

  • 表示层负责接收请求、转发请求、显示数据等;
  • 业务层负责组织业务逻辑;
  • 持久层负责持久化业务对象。

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

建议阅读《企业应用架构模式》《领域驱动设计》《Pojos in action》《J2EE 核心模式》等经典书籍,不要随意发明名词。

MVC - 模型、视图、控制器。

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

XX层,英文是tier(物理上)、layer(逻辑上)。既是层,个人理解就有上下关系。

模型、视图、控制器有上下关系?否则 依赖倒转原则(高层不依赖于低层,二者都依赖于抽象)指的是啥?

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

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

一般来说,框架 > 架构模式> 设计模式 > 设计原则。打个比方,

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

How MVC belongs to only Presentation Layer?

Presentation Pattern & Architecture Pattern

三层构架 和 MVC 是什么?的更多相关文章

  1. 三层构架和 MVC的区别和理解

    1.三层构架和 MVC 意思一样么? Java WEB 开发中,服务端通常分为表示层.业务层.持久层,这就是所谓的三层架构: 1.表示层负责接收用户请求.转发请求.生成数据的视图等: 2.业务层负责组 ...

  2. 关于三层架构与MVC的一些理解

    刚毕业的时候,参与了一个上位机的系统开发.上位机所使用的是.net Windows Form技术. 当时,和一个北理的姑娘在一个项目组里.因为她来公司时间比较长,而且经验比较丰富,所以,上位机的架构由 ...

  3. 三层架构 与 MVC那点事儿

    以下为转载内容: 地址 MVC与三层架构的异同点 首先先解释一下MVC. V即View.是视图的意思. C即Controler.是控制器的意思. M即Model,是模型的意思. 这三个里.最不容易理解 ...

  4. 三层架构与MVC之间的区别

    文章转发自:http://www.admin10000.com/document/535.html 我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真 ...

  5. 三层架构与MVC & 设计模式的较量

    刚刚学习了三层架构,并且正在实际应用中,但随着学习的深入,又了解到了一个叫MVC的东西,(早在设计模式中就听到过MVC,仅仅是简单查了一下什么意思.)如今正好把这三个东西放在一起聊聊. 三层 是一个分 ...

  6. 三层架构和MVC模式

    目录[-] 1.三层架构 2.MVC 2.1 标准的MVC(Model-View-Controller) 2.2 Web MVC 3.三层架构和MVC的区别与联系 1.三层架构 三层架构(3-tier ...

  7. 三层架构与MVC的区别

    我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...

  8. 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系

    #[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 ![关系图解](http://images.cnitblog.com/blog/84 ...

  9. asp.net中三层架构与mvc之区别?

    对于标题中的问题,如果是没有同时接触三层架构和mvc的初级.net开发人员,想必一定会非常糊涂和混淆.关于此我也百度过N回,看过N多帖子和 回答,但几乎没有人能表述清楚.近期我从典型mvc+entit ...

随机推荐

  1. Cisco ASA 8.3前及8.3后版本Access-list 变化

    8.2及之前 access-list:源地址是真实IP地址,目的地址是映射地址packet-tracer:源地址为真实IP地址,目的地址为映射地址 8.3及之后access-list:源地址和目的地址 ...

  2. 《LeetBook》leetcode题解(11):Container With Most Water[M] ——用两个指针在数组内移动

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  3. 深度学习(二)BP求解过程和梯度下降

    一.原理 重点:明白偏导数含义,是该函数在该点的切线,就是变化率,一定要理解变化率. 1)什么是梯度 梯度本意是一个向量(矢量),当某一函数在某点处沿着该方向的方向导数取得该点处的最大值,即函数在该点 ...

  4. Strut2 ognl取出存放在request,session,application和对象栈的中的值

    1.取出request,session,applicaiton中的值 a.往里面加入request,session,application中加入值 public String testServlet( ...

  5. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  6. python实例:快速找出多个字典中的公共键

    1.生成随机字典 # 从abcdefg 中随机取出 3-6个,作为key, 1-4 的随机数作为 value s1 = {x : randint(1, 4) for x in sample('abcd ...

  7. Mysql查询今天、昨天、7天、近30天、本月、上一月数据

    今天 SELECT * FROM 表名 WHERE TO_DAYS(时间字段名) = TO_DAYS(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  8. RocketMQ的一些特性

    一 nameserver 相对来说,nameserver的稳定性非常高.原因有二: 1 nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即 ...

  9. echarts 添加标线,设置颜色

    <script src="assets/js/jquery-1.8.3.min.js"></script> <!--echart图表引入js--> ...

  10. C# 实现将listview中已经显示的数据导出到Access 数据库

    private void button1_Click(object sender, EventArgs e) { OleDbConnection dbconn = new OleDbConnectio ...