基本概念
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,即BLL层。这里说的三层是指逻辑上的三层。
复杂项目不能把sql语句直接写到程序里,不模块化、难以维护。应该采用三层架构。三层架构的本质还是面向对象技术思想的体现。主要是封装、松耦合思想的应用。
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。(通常还会加一个Model(模型、实体)层)
其实就是各个层(可以想象为类)之间的有序调用
各层的作用
DAL(数据访问层:Data Access Layer):
只提供基本的数据访问,与数据源打交道:取数据、写数据、删数据(增(Insert)、删(Delete)、查(Select)、改(Update))。将这些操作封装成函数以供调用即可。
UI(界面,User Interface)层:
只负责显示和采集用户操作,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。不包含任何业务相关的逻辑处理。
设计原则:用户至上,兼顾简洁。
主要技术:WinForm、WebForm
BLL(业务逻辑层:Business Logic Layer):
负责处理业务逻辑,是架构中的核心,处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理,处理完成后,返回必要数据给UI。(1、从DAL中获取数据,以供UI显示用(DAL->BLL->UI);2、从UI中获取用户指令和数据,执行业务逻辑,将结果返回给UI(UI->BLL->UI);3、从UI中获取用户指令和数据,通过DAL写入数据源(UI->BLL-DAL->Bll->UI))
Model层:就是实体类,负责三层之间的数据传递。
各层之间依赖关系
DAL层只能引用Model层;BLL层只能引用DAL层、Model层;UI层可以引用BLL层、DAL层(间接)、Model层。
为何要分层(优点)
这里声明并不是所有的程序都要分层。分层主要针对复杂系统的团队开发。此种开发中分层对程序开发者、维护者、性能方面都有很大的好处。下面介绍分层开发的优点:
易开发
分层可以分散关注,一旦定义好各层次之间的接口,开发人员可以只关注整个结构中的某一层,对开发人员的技术要求和开发难度都大大降低,不需要人人都很精通业务,不懂业务的调调别人写好的东西就行了。更有利于团队开发。
例如UI人员只需考虑用户界面的体验与操作,BLL层的设计人员可以仅关注业务逻辑的设计,而数据库设计人员也不必为繁琐的用户交互而头疼了;而且只要按照事先商定的函数接口,并行地开发就可以,而不必向从前那样,后面的工作必须等前面的工作完成后才能开始。当然,这样的开发模式需要很好的项目协调和文档作支持。每个开发人员的任务得到了确认,开发效率就可以迅速的提高。
松耦合(本质)
分层的本质是解耦,解耦的本质是代码复用和应对变化,因为各模块之间耦合低,所以修改模块更简单,同时也更好的进行代码复用。解耦的结果,是降低了复杂度,直接提高了程序的可扩展性和可维护性。如果各模块之间交错连横,彼此间相互依赖,谁都是不可替换的。一旦发生改变,则牵一发而动全身,解决一个问题的时候,那需要考虑东西太多,极易出错。
易扩展、易维护
由于解耦性,分层的可扩展性要远远好于普通代码,它使得程序结构更加的明确,可以更好的应对变化,更容易的进行功能扩展。举个简单的例子,如果企业要给内部IT开发建造一个基础层,那么分层有利于将这个基础层越建越大,而能够很轻易的去升级维护现有系统。
在后期维护的时候,极大地降低了维护成本和维护时间。由于分层的松耦合性,它可以更好的应对变化,同时使得程序更容易维护。例如要更换数据库只需要增加一个数据访问层就可以了。
标准化
进行好的分层式结构设计,标准是必不可少的。只有在一定程度的标准化基础上,这个系统才是可扩展的,可替换的。而层与层之间的通信也必然保证了接口的标准化。