1、三层架构

我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构从上至下分别包括:表现层、业务层、持久层。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。三层架构在我们的实际开发中使用的非常多。

三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:

  • 表现层

    • 表现层也称为界面层,位于最外层(最上层),离用户最近。也就是我们常说的web层。
    • 它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。
    • 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
    • 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
    • 表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)
  • 业务层
    • 也就是我们常说的 service层。它负责业务逻辑处理(主要是从数据库中得到数据然后对数据进行逻辑处理),和我们开发项目的需求息息相关。
    • web层依赖业务层,但是业务层不依赖web层。
    • 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)
    • 业务层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。业务层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
  • 持久层
    • 也就是我们是常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的
    • 采用DAO模式,建立实体类和数据库表映射(ORM映射)

在三层中JSP与Servlet代码都属于表现层,业务逻辑层则是完成业务规则的实体类,数据访问层则是JDBC等代码。

2、三层架构的优缺点

优点:

  • 开发人员可以只关注整个结构中的其中某一层;
  • 可以很容易地用新的实现来替换原有层次的实现;
  • 可以降低层与层之间的依赖;
  • 有利于标准化;
  • 利于各层逻辑的复用。
  • 结构更加的明确
  • 在后期维护的时候,极大地降低了维护成本和维护时间

三层架构把不同层的业务职责分离得更加彻底,逻辑层不包含一丁点的视图层代码,同样的数据层也不应该包含一丁点的逻辑层代码,符合低耦合的思想。

三层架构更好地实现了模块化编程,使用三层架构设计的系统更容易扩展、更换,特别是如今不止pc端一种设备,如果没做好分层就无法适应多设备的访问。例如表示层我们使用jsp+Servlet做的,面向的是web,如果哪天不做web了,要把整个表示层更换成桌面的图形化来显示,那么使用了三层架构的话,只需要更换表示层即可,业务逻辑层和数据层都可以进行复用。如果没有进行分层的话,各个模块都耦合在一起就无法进行复用,只能重新再编写一个适应桌面的系统出来,这样就很耗时耗力了。

我们都知道WebService是一种跨编程语言和跨操作系统平台的远程调用技术,如果一个系统是使用三层架构进行设计的,那么逻辑层就可以通过WebService共享给其他不同语言编写的应用程序调用。

缺点:

  • 降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
  • 有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

3、三层架构与MVC的区别

  • 很多人容易把三层架构与MVC模式混淆,三层与MVC的最不同的地方在于三层是没有Controller控制器的概念。虽然同样是架构级别的,三层与MVC 相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。MVC没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了,在三层中也提到了Model概念,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层” 中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

  • 三层是基于业务逻辑来分的;而MVC是基于页面来分的。
    三层是种软件架构,通过接口实现编程;MVC模式是一种复合设计模式,一种解决方案。
    三层模式是体系结构模式;MVC是设计模式。
    三层模式又可归于部署模式;MVC可归于表示模式。

JavaWeb三层架构的理解/三层架构的优缺点/三层架构与MVC的区别相关推荐

  1. 【我对软件平台架构的理解】第一部分:软件平台架构有什么用

    一.先说说软件工程 在提"软件平台架构"这个概念之前,先说一下我对软件工程的理解,借鉴一下网上对软件工程的定义:[注1] (1).将系统化的.规范的.可量化的方法应用于软件的开发. ...

  2. 阿里高级专家:我对技术架构的理解

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  3. MVC三层架构简单理解

    文章目录 MVC三层架构: 1.理解MVC: 2.以前的架构(只有两层): 3 MVC 三层架构: MVC三层架构: 1.理解MVC: Model view Controller 模型.视图.控制器 ...

  4. 对Java的三层架构的理解

    什么是三层架构? 三层架构是一个成熟的软件应用程序 架构,它将应用程序组织到三个逻辑和物理计算层中: 表示层或用户界面:用于处理数据的应用程序层:以及用于存储和管理应用程序关联数据的数据层. 三层架构 ...

  5. 软件开发过程中的三层架构的理解

    一.什么是三层架构 情景 设想我们去餐厅吃饭,我们刚刚坐下来,就会有服务员过来为我们服务.服务员记下我们点的菜,然后将菜单传给厨房的大厨.大厨拿出后勤人员事先买好准备好的菜开始烹制,然后交给服务员端出 ...

  6. 三层架构与MVC的区别

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

  7. 三层架构和mvc的区别

    一.MVC简介 MVC 即Model(模型),View(视图),Controller(控制控制器). MVC是一种软件开发架构模式,全名是Model View Controller,是模型(model ...

  8. 【网络】叶脊(Spine-Leaf)网络拓扑下全三层网络设计与实践(一) - 叶脊网络架构简介

    1.  叶脊网络架构简介 天地万物,应运而生.传统的三层网络架构,在发展了多年后,终于也命数将尽了,替代它的,将是叶脊网络架构.究其原因,是因为传统三层网络架构自身存在一些无法突破的限制与弊端,在当今 ...

  9. 什么是三层架构?它的优点是什么?_三层实木地板系列:什么是三层实木复合地板?有哪些特点?能否用于地暖?...

    在欧美国家,三层实木地板以其结构的稳定性.独特天然脚感.制作工艺和选材的环保性.表板工艺的创意设计性赢得了主流木地板市场,占有60%-70%的市场份额.三层实木地板作为一个国际化品类以更加清晰时尚的形 ...

最新文章

  1. 千岛湖救人工程师再次暖心,“感动阿里奖”奖金都捐公益
  2. 非人哉恰饭的九月最美丽,只有啸天是菜鸡,上班睡觉太厉害了
  3. 计算机教育日志,信息技术日志1
  4. eclipse User Enties 顺序
  5. java 内存 开发 经验_有一到五年开发经验的JAVA程序员需要掌握的知识与技能!...
  6. python小波分解与重构_小波分解和重构
  7. JQuery AJAX基本使用
  8. python真是最烂的语言_在大型项目上,Python 是个烂语言吗?
  9. node.js读写文件
  10. 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案
  11. C语言练习题,鸡兔同笼
  12. csdn的一篇文章的片段 职业初期的解惑
  13. 美发店员工合同WORD版(可直接下载打印)【卓美业网拓软件整理】
  14. win10更新完提示未安装任何音频输出设备2019-11-13解决
  15. Python练习——用循环求100以内7的倍数
  16. 什么是Python中的Pip?
  17. JS 每日一题 #13
  18. C1.Win.C1GanttView.C1GanttView 甘特图使用经验:子任务
  19. Java字符串相似度匹配
  20. registration 计算机视觉

热门文章

  1. 异常Exception和异常日志笔记
  2. 小米造车,造的不是商业模式,是趋势
  3. Robinhood向美国监管机构递交供传统银行服务的规章
  4. 筑泰防务受邀参加公安无线通信与移动警务技术应用研讨会
  5. 筑泰防务助力江门市公安打造新一代警务移动终端管理平台
  6. java中加减乘除优先级_java运算符优先级
  7. tar zxvf 简单了解
  8. MATLAB 求解最优化问题
  9. 数字信号处理笔记(上)
  10. 中国移动增量用户落后于联通和电信,该如何应对?