zoukankan      html  css  js  c++  java
  • 浅析三层架构

         初次看到三层有些迷茫的感觉,都不知道这个到底是什么,也不知道有什么用。还记得以前师傅开会的时候,曾经提到过三层里什么U层、B层的,当时也没有过深的印象;现在学到了这一块,体会挺深的。


       什么是三层?

          三层指的是表示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)

            UI层:指为用户提供交互操作的界面,用户可以输入数据和显示数据处理后的结果;

            BLL层:是UI层和DAL层交互的桥梁,通过BLL层实现对数据库的处理,将返回值传递给用户;

            DAL层:主要是对数据库进行处理,通过BLL层返回值对数据库进行增、删、改、查等操作;


       三层之间的关系:

          

             用类图表示为:

                  

            其中Entity表示实体类,不属于三层中任何一层,但是却必不可少。数据在三层的传递过程中,可能因为在不同的层中的定义不同而造成混乱,而将变量封装在实体类中,这样在传递数据时只需传递实体类即可。实体类贯穿于三层中,它连接着三层。


       三层的作用:

          表示层的内容就是来和用户打交道,采集用户的输入信息和操作;是展现给用户的界面,用户的要求都体现在界面上。

          BLL层是将UI层传来的数据传给DAL层写入数据源,然后DAL层在将数据返回给BLL层,由BLL层返回给UI层;这样来实现UI层和DAL层的交互。当然在传递数据的过程中,BLL层还需要实现一些必要的业务逻辑的处理。其传递机制主要是:UI→BLL→UI和 UI→BLL→DAL→BLL→UI

          DAL层主要是对数据库的处理,通过BLL层传来的数据和要求对数据库进行增删改查操作。


       为什么使用三层?

        通过上述内容,相信我们能够了解到三层的基本概念了,那么我们为什么要使用三层呢?为什么不直接使用UI层和DAL交互,增加一个BLL层作为传递不是很麻烦吗?

          1、解耦合:通过三层设计,我们可以减少模块之间的耦合,实现修改某个模块而不影响整体功能的目的,使软件的可扩展性大大增强。我们先前所学的软件工程、设计模式等,它们的一个共同之处都是尽可能的减少模块间的耦合性,这样采用利于软件开发和后期的维护工作。

          2、易开发:一般情况下,一款软件是庞大的,需要很多人一起来开发。使用三层,团队之间就可以不用关心其他模块的功能实现,只要将自己负责的层写好就可以了,例如UI层的只需负责实现用户的各种操作,而不用去关心其数据如何在数据库中得到或写入等问题;DAL层也不用担心如何实现与用户的交互操作。他们只需负责自己应有的职责就行,最后通过约定好的接口进行实现就行了,这样大大的提高了团队开发的效率。

          3、易扩展、易维护:由于三层具有很好的低耦合性,这样就有利于我们的后期维护;也不用担心因为添加某些功能或者删除功能而造成系统的错误,使软件具有良好的扩展性;

         当然三层的使用还有利于软件的标准化,能更好的适应变化。但是有利就有弊,使用三层,增加了开发的成本和代码量;还有就是降低了系统的性能,每次的操作都需要通过BLL层的传递,显然没有直接通过访问数据库这样的性能好;有时候会造成级联修改,比如我们想在表示层增加功能,为了符合三层思想,我们就需要在BLL层和DAL层增加相应的代码。

          

       总结:

          任何一种方法的使用,有它的优点就有不利之处,我们应该从整体上来看问题,寻找适合的方法。但是总的来说,使用三层的优点还是大于弊端的。

          心得体会:对于自己来说,学习这一部分内容还是相对来说比较困难的。虽然其内在思想以前都接触过,但是这种方法的使用还是不太娴熟,对这个过程的理解不到位,造成自己有的地方还是有些混乱。比如,三层之间的传递问题,各个层内部的判断问题等。现在基本概念有了一定的了解,还需要通过具体的实践来巩固,同时对自己的问题进行深刻的体会与理解。

  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253820.html
Copyright © 2011-2022 走看看