首先,学习任何知识都必须从基础抓起。三层学习也是一样,首先要了解基本的理论知识。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
另外,在学习三层过程中可以看看MVC,将MVC和三层架构比较着理解,可以帮助大家更好的学习三层。
结构图:
基本的概念:
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
各层作用:
数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
三层的优缺点:
优点:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
缺点:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
规则:
1.系统各层次及层内部子层次之间都不得跨层调用。
2.Entityobject 在各个层之间传递数据。
3.需要在UI层绑定到列表的数据采用基于关系的DataSet传递,除此之外,应该使用Entityobject传递数据。
4.对于每一个数据库表(Table)都有一个Entityclass与之对应,针对每一个Entity class都会有一个BEM Class与之对应。
5.在数量上,BEMClass比Entity class要多,这是因为有些跨数据库或跨表的操作(如复杂的联合查询)也需要由相应的BEM Class来提供支持。
6.对于相对简单的系统,可以考虑将Businessclass 子层和Business Flow 子层合并为一个。
7.UI层和BL层禁止出现任何SQL语句。
错误与异常:
异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被转化为业务执行的结果。
1.D层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。
2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。
3.在有些情况下,B层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业务要求试探指定的数据库是否可连接,这时B就需要将数据库连接失败的系统异常转换为业务执行的结果。
4.UI层除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系统异常,并将其解释为友好的错误信息呈现给用户。
难以理解和应用的实体类:
我在学习三层过程中,遇到的最大的困惑就是关于实体类这部分内容的。当时,不知道该怎么样去用它,不知道该这样去设计和协调它。关于实体类的讲解,网上也没找到很好的讲解过程。但是,我可以给大家推荐一个例子() ,只要你仔细去研究这个例子,你就会很快明白,可以很快知道实体类到底该怎么用以及使用它的好处。这里给大家一个建议,一定要仔细找资料去学习三层的有关内容,不要上来就看这个例子。当你理解差不多之后,再去看,再去研究这个例子,那样才会有效果。
看完这个例子之后,我大概画了一张图来理解它:
学习三层有一段时间了,虽然基本上理解了三层。但是,对于三层,还是要进一步深入学习的。它是整个软件工程的一部分,是需要在实践中去感悟和理解的。所以,三层的学习是融入在接下来的学习中,做工程的过程中,多思考。这样才能将它学好,学透彻。
欢迎大家提出自己学习三层的感受和遇到的困惑,我们一起讨论!