什么是三层架构?各层的主要功能及相互关系都有哪些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是三层架构?各层的主要功能及相互关系都有哪些相关的知识,希望对你有一定的参考价值。

一般讲到三层架构,其实就是将整个业务应用划分为表示层、业务逻辑层、数据访问层等。
数据访问层DAL,业务逻辑层BLL。表现层UI (界面类的)【 model(数据模型层,主要放的我就不用说了。一般都是数据库中的。) ,】model是贯穿的。所有的都引用它,bll引用dal ui引用dal 和bll 然后就是调用
三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
普通三层:数据访问层DAL:用于实现与数据库的交互和访问,从数据库获取数据或保存数据到数据库的部分。 业务逻辑层BLL:业务逻辑层承上启下,用于对上下交互的数据进行逻辑处理,实现业务目标。 表示层UI:主要实现和用户的交互,接收用户请求或返回用户请求的数据结果的展现,而具体的数据处理则交给业务逻辑层和数据访问层去处理。业务实体Model:用于封装实体类数据结构,一般用于映射数据库的数据表或视图,用以描述业务中客观存在的对象。Model分离出来是为了更好地解耦,为了更好地发挥分层的作用,更好地进行复用和扩展,增强灵活性。 通用类库Common:通用的辅助工具类
工程模式:简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例。
工厂角色(Creator)
是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品角色(Product)
是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。
具体产品角色(Concrete Product)
继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。工厂类返回的都是该角色的某一具体产品。
通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通 讯与中间层建立连接,再经由中间层与数据库进行交换.
完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层 否则你的应用是不是多层结构,或者说是层结构的划分和组织上是不是有问题就很难说. 不同的应用有不同的理解,这是一个概念的问题.
MVC系统中的模型从概念上可以分为两类――系统的内部状态和改变系统状态的动作。模型是你所有的商业逻辑代码片段所在。本文为模型提供了业务实体对象和业务处理对象:所有的业务处理对象都是从ProcessBase类派生的子类。业务处理对象封装了具体的处理逻辑,调用业务逻辑模型,并且把响应提交到合适的视图组件以产生响应。业务实体对象可以通过定义属性描述客户端表单数据。所有业务实体对象都EntityBase派生子类对象,业务处理对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过业务实体对象实现了对视图和模型之间交互的支持。实现时把"做什么"(业务处理)和"如何做"(业务实体)分离。这样可以实现业务逻辑的重用。由于各个应用的具体业务是不同的,这里不再列举其具体代码实例。
MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。 同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。 在三层架构中没有定义Controller的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
在ASP NET中的MVC架构编写的,具有极其良好的可扩展性。它可以轻松实现以下功能: ①实现一个模型的多个视图;②采用多个控制器;③当模型改变时,所有视图将自动刷新;④所有的控制器将相互独立工作。这就是MVC架构的好处,只需在以前的程序上稍作修改或增加新的类,即可轻松增加许多程序功能。以前开发的许多类可以重用,而程序结构根本不再需要改变,各类之间相互独立,便于团体开发,提高开发效率。下面讨论如何实现一个模型、两个视图和一个控制器的程序。其中模型类及视图类根本不需要改变,与前面的完全一样,这就是面向对象编程的好处。对于控制器中的类,只需要增加另一个视图,并与模型发生关联即可。该模式下视图、控制器、模型三者之间的示意图如图2所示。同样也可以实现其它形式的MVC例如:一个模型、两个视图和两个控制器。从上面可以看出,通过MVC架构实现的应用程序具有极其良好的可扩展性,是ASP NET面向对象编程的未来方向。
MVC的不足体现在以下几个方面:(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。(2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。(4)目前,一般高级的界面工具或构造器不支持MVC架构。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
三层架构是将代码按其作用分成三部分,每部分解决自己负责的流程. 三层架构的功用之处,在于驾驭大型web程序的结构,使之便于管理和扩展.
在设计UI的时候,我们不需要关心其中的逻辑和数据问题,只需要空出对应的位置,用于放置数据. 在设计和修改的时候,要解决的只是html的结构,代码看起来干净利落,做起来也是干净利落.
UI直接将程序逻辑的任务丢给BLL,BLL就开始构建具体的实现细节.BLL的创建依赖于业务. 例如一个文章系统,BLL_Aticle就表示它是用于对文章的处理的.BLL_Aticle可以提供给UI一个文章列表的recordset,显示在UI的预留位置. 当BLL_Aticle需要从数据库中获取数据的时候,就将任务丢给DAL层
DAL层专门负责和数据库打交道,它从BLL获取参数,组织一个有效的SQL,建立数据库连接,执行SQL进行更新或获取,将返回的数据交给BLL.
每一部分的业务都集中于一个UI-BLL-DAL的链中,上下清晰了然. 至于是怎样的便于管理和扩展,将在后面结合实例进行分析.
复杂的生命形式必有复杂的生存法则,若想在自己的项目中应用好三层架构,需要多用点心体会其中的应用法则.
我对三层架构的理解还不够深,这些文章能算是抛砖引玉就不错了.大家在阅读当中不要局限于我所构思的法则,要多向具体的应用中去实践,根据具体情况,寻出自己的法则. 有所感悟,就记得写下来,这种感悟是进步的契机,但必然不是最终的结果.有了感悟就拿去应用,可以发现它的优劣,继续完善
三层架构比双层或单层结构都有更大的优势。三层结构适合群体开发,每人可以有不同的分工,协同工作使效率倍增。开发双层或单层应用时,每个开发人员都应对系统有较深的理解,能力要求很高,开发三层应用时,则可以结合多方面的人才,只需少数人对系统全面了解,从一定程度工降低了开发的难度。
三层架构属于瘦客户的模式,用户端只需一个较小的硬盘、较小的内存、较慢的CPU就可以获得不错的性能。相比之下,单层或胖客户对面器的要求太高。
三层架构的另一个优点在于可以更好的支持分布式计算环境。逻辑层的应用程序可以有多个机器上运行,充分利用网络的计算功能。分布式计算的潜力巨大,远比升级CPU有效。
三层架构的最大优点是它的安全性。用户端只能通过逻辑层来访问数据层,减少了入口点,把很多危险的系统功能都屏蔽了。
参考技术A java三层架构分别有表现层、业务逻辑层、业数据访问层:
UI(表现层):
主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。
BLL:(业务逻辑层):
UI层和DAL层之间的桥梁。实现业务逻辑。
业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。
如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。
DAL:(数据访问层):
与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。

简析三层架构

三层架构——3-tier architecture

通过几个问题,来初步的学习一下三层架构。
1、什么是三层架构
2、应用场景——为什么要用三层架构?
3、三层作用
4、各个层之间的关系
5、三层联系——引用
6、各层是怎样调用的
7、三层和二层的对照
这几个都是学习三层中最主要的问题,仅仅有把这些问题搞清楚。才算是打开了三层的门。


1、什么是三层架构

在软件体系架构设计中,分层式结构是最常见。也是最重要的一种结构。三层从下至上分别为:数据訪问层(DAL)、业务逻辑层(BLL)、表示层(UI)。

技术分享


 表现层(UI):展现给用户的界面。即用户在使用一个系统的时候他的所见所得。

业务逻辑层(BLL):对数据层的操作,对数据业务逻辑处理。

数据訪问层(DAL):对数据库的操作,数据的增添、删除、改动、查找等。


2、应用场景——为什么要用三层架构?

为什么要用三层架构?

解耦。

不是全部的程序都须要使用三层架构。不是必需把简单的问题复杂化。

先来说一下解耦,举例:修电脑

电脑硬盘坏了?我们要做的就是换掉电脑硬盘

内存条坏了?仅仅要换内存条就好

这些部件出现故障,都不会影响别的部件的正常使用,这个就是让他们之间解耦。

而和电脑不同的收音机,不论什么部件坏了。都会影响别的部件,这个体现的就是他们之间的耦合比較高。

从这个样例里面就能够看出解耦的优点,在三层中就是用的解耦的思想。

 

 

3、三层作用

数据訪问层:从数据源载入(Select)。写入(Insert/Update),删除(Delete)数据。仅限于和数据源打交道,让程序简单明了。

显示层(UI):向用户展现特定业务数据,採集用户的输入信息和操作。

原则:用户至上。兼顾简洁。

业务逻辑层(BLL):从DAL中获取数据,以供UI显示用,从UI中获取用户指令和数据,运行业务逻辑、从UI中获取用户指令和数据,通过DAL写入数据源。

 

4、各个层之间的关系:

UI->BLL->UI:UI提供数据指令到业务逻辑。若自己能够搞定,则直接反馈到UI

UI->BLL->DAL->BLL->DAL:UI提供用户指令和数据,提出请求并搜集一定的数据BLL,BLL处理不了时,要訪问数据源。则转给DAL


技术分享

5、三层联系——引用

以登陆为样例,说明三层之间的引用关系:

实体层(entity):定义的username和password。

U层:向相应的文本框中输入账号和password

B层:推断U层输入的账号和password是否存在。

D层:连接数据库的语句,查询数据库。

他们之间的联系是通过实体传递来进行的。。

 

DAL所在程序集不引用BLL和UI

BLL须要引用DAL

UI直接引用DAL,可能引用BLL

很忌讳互相引用,为了避免这个问题全部出现了实体层(业务数据模型。里面的数据和数据库的有所差异)

应用原则:

DAL仅仅提供主要的数据訪问,不包括不论什么业务相关的逻辑处理。UI仅仅负责显示和採集用户操作。不包括不论什么的业务相关的逻辑处理,BLL负责处理业务逻辑,通过获取UI传来的操作指令。决定运行业务逻辑。在须要訪问数据源的时候直接交给DAL处理。处理完毕后。返回必要数据给UI。

 

6、各层是怎样调用的

表示层(UI)是用户须要的界面。用户有什么需求都是在这个上面进行的修改,一旦有修改。首先U层向B层发送用户请求的说明。到达B层,B层再将U层的用户请求发送到D层,D层接受到用户请求的指令后,对它进行处理,发送数据反馈到B层,B层再发给U层,将这一变化反应出来。

 

举例:

小菜和大鸟吃羊肉串的样例。小菜和大鸟就是用户,服务员为表示层(U层)。烤肉师父为业务逻辑层(U层引用B层的方法或者參数),老板娘为数据訪问层(D层),负责给烤肉师父从库房拿烤串。

大鸟点了羊肉串5串(參数)。服务员把羊肉串5串(參数传递)传递给烤肉师父(数据请求),烤肉师父再传递给老板娘(对參数进行处理),老板娘得到请求后,拿羊肉串给烤肉师父(数据反馈),烤肉师父将烤好的羊肉串给服务员(数据反馈),服务员再将5串羊肉串给大鸟(U层展现出来),他们之间通过调用来实现联系。

 

7、三层PK二层

二层架构:

业务逻辑简单。没有真正的数据存储层

三层架构:

抽象出业务逻辑层。当业务复杂到一定程度,当数据存储到对应的存储介质,数据存储脱离开业务逻辑,把业务逻辑脱离开UI单独存在,UI仅仅须要呼叫业务訪问层。就能够实现跟用户的交互。

三层的优点:

1、开发者能够仅仅关注整个结构中的当中某一层;

2、能够非常easy的用新的实现来替换原有层次的实现。

3、能够减少层与层之间的依赖;

4、有利于标准化;

5、利于各层逻辑的复用。

6、结构更加的明白

7、在后期维护的时候,极大地减少了维护成本和维护时间。

 

这几点的中心思想就是“高内聚,低耦合”。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被改动,不会对有关系的类造成波及。

 以上是对三层的简单认识。有的地方可能写的不正确。欢迎指出。

 









以上是关于什么是三层架构?各层的主要功能及相互关系都有哪些的主要内容,如果未能解决你的问题,请参考以下文章

简析三层架构

三层结构主要包括哪些类的设计及各类的主要作用

三层架构简单介绍

浅谈三层架构MVC之间的关系

TCP/IP参考模型分文基层?各层功能如何?各层的主要协议都有哪些?

三层架构详解