对三层架构的浅层理解

来源:互联网 发布:缎面连衣裙淘宝 编辑:程序博客网 时间:2024/05/17 00:05

最近做项目一直被扩展性弄的焦头烂额,经常是加一个功能就要修改好多代码,直到最后代码一团乱麻再也不能维护了。所以决定花些时间学习一下传说中的三层架构,由于是刚刚接触,文章写得不是很上档次,只适合架构小白作为一个入门级别的东西。

麻雀虽小,五脏俱全,我们先从为什么要三层架构谈起,然后介绍一下什么是三层架构,最好说明三层架构的设计要点。

先说为什么。三层结构是一个上档次的名词,一般刚学程序的时候不会用的,因为当时我们的目标还仅仅限于实现一个具体的功能。比如简单的冒泡排序、选择排序,然后稍微难点儿的快排、KMP、动态规划,哪怕到最后已经有了几个源文件的GA、DE、PSO等智能算法(本人接触的例子,其他的程序类似)。

但如果我们真的要设计一个比较大的甚至是实用的系统,那不出意外的话你肯定会发现程序构架是一门艺术,好的程序架构实现简单、扩展方便、容易维护,而那种顾头不顾尾,拆东墙补西墙的方法是在是low的不行,代码写到一定程度你自己就放弃了。所以设计程序的结构是非常重要的,我们必须先对程序系统进行分模块,分层次然后才能在后面的设计中如鱼得水。于是就诞生了三层架构这么个东西,这个东西就是程序设计的一个模板,只要按照这个模板来设计程序,那程序的可扩展性可维护性就有了保障。

然后是是是什么。三层架构到底是哪三层呢?我们按照从上往下(PS:这里的上指的是靠近用户,下指的是靠近计算机底层)的次序来说说:

第一层就是我们看到的用户界面以及后面的控制代码,用户界面我们都知道,登上QQ后那个长条形状的窗口就是QQ的界面,然后还包括与它直接相关的一些代码,比如说控制窗口大小的,控制各个按钮颜色的,以及各个按钮的单击事件等等(有过图形界面开发经验的肯定能明白)。这一层我们称为UI层,对应的代码主要是一个窗口类,然后里面是各种控件属性的控制代码,还有单击事件的触发函数等等。

第二层是业务层,主要就是一些接口函数,用于将下面的数据上传至UI层,或者将UI层的数据下传到底层。业务层写为BLL,里面主要是一些Manager类,里面放了一些函数用来管理操控底层的资源,这里一定要注意接口的扩展性和不可改变性,扩展性指我们可以很容易在类内部添加一个函数,用来完成某种操作,但现有的接口一般是不能改变的,因为这个一旦改变那使用这个接口的UI层代码全部都要改变。

第三层数据访问层,主要就是我们对底层数据直接访问的代码了,最具代表性的就是数据库的crud(增删改查)语句了,一般数据库的管理由一个专门的类来完成,称为XXHelper类,这个类文件也放在这一层,据此我们也可以推测出这一层起到的是服务器的作用,所以一般命名为Server类。就数据库的服务来说,一般就是根据BLL层传入的参数组织数据库语句,然后执行语句返回结果给BLL层。而且一般是BLL层的一个类对应数据库中的一张表,由这个类完成对这张表的增删改查。

除此之外,一般还会有几个Model类(其功能类似于C语言中结构体),每个Model类对应一个数据库表的所有字段。即我们可以把一条查询结果对应放入一个Model类中,当然还可以把很多条记录放入一个Model类的容器中,这样在不同的层之间传递数据会非常方便。

最后是设计要点了,这也是文章的重点,毕竟理论只有应用到实践中才有作用。对于新手来说,三层架构的设计有点儿牛吃南瓜无处下嘴的感觉,没办法什么都需要一个过程。只要自己做一次就明白是怎么回事儿了,所以还是建议大家学程序一定要自己动手,看是永远学不会的。

首先第一点是确定程序的功能,界面层大概是个什么样子的,哪里需要对数据库操作等等,这里就可以先把界面搭建出来了。然后底层都需要数据库的哪些表,这里可以确定DAL层有几个类文件,Model类需要几个等等(一张表对应一个DAL中的Server类,对应Model类中一个类)。

然后就是确定每一次数据访问的数据流了,从上至下的数据访问是从用户发起的,一般用户触发一个事件,向BLL层传送一个指令,这个指令一般都是一个字段的值,然后BLL层向下面DAL传递的是经过包装的字段,再然后DAL层根据这个字段组织sql语句,进行查询。查询结果一般为一个表格,这个表格经过处理(变成一个容器或者适合显示的虚拟表格)再返回给BLL层,这个处理可以由DAL层处理,也可以由BLL层处理,如果DAL层处理比较方便,可以不经过BLL层直接将处理好的数据返回给UI层。数据保存时的情形类似,将UI层的数据传递给底层进行保存。这里要注意的一点是一定要确定具体数据形式,是容器,是一个结构体,还是一个表格。因为三层之间的联系就是数据联系,只要明确了数据形式,才能开始代码工作。

最后就是编码了,根据前面确定数据流形式,针对每一层进行代码实现就可以了,细微处的功夫就看各位的基本功了。

百闻不如一见,把自己做的一个java小例子发给大家吧

http://pan.baidu.com/s/1kUwT2Vd

2 0
原创粉丝点击