博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

三层结构分析

Posted on 2005-09-28 00:54  sashow  阅读(712)  评论(0编辑  收藏  举报
        对要实现的系统进行分层并不是从面向对象诞生后才有的一种思想。在这之前,分层就有广泛的应用,如  TCP/IP 协议的实现就是采用分层。分层的有以下特点:
        一、功能分工,每一层的划分都应有它自己明确的与其他层不同的基本功能。
        二、隔离稳定,层与层的结构要相对独立和相互隔离,从而使某一层内容或结构的变化对其他层的影响小,各层的功能、结构相对稳定。
        三、分支扩张,公共部分与可分支部分划分在不同层,这样有利于分支部分的灵活扩充和公共部分的相对稳定,减少结构上的重复。
        四、底层与上层是服务者与顾客的关系。
        从上可以看出,面向对象技术的封装与继承对于实现分层思想具有更大的优势。

        系统三层结构即:用户界面层,业务逻辑层,数据层(也有文章认为是数据库层,但我觉得叫数据库层不太妥当,以下会有分析)。
        用户界面层:负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向业务逻辑层传输用户输入前进行合法性验证)。
        业务逻辑层(也有人叫做商业逻辑层):接受从用户界面层输入的用户请求,将其转化为业务过程需要的启动条件并根据业务逻辑有序地向数据层发送数据请求,并将数据层返回的数据解释及组合成用户所需信息,返回给用户界面层。
        数据层:对数据进行管理,并向业务逻辑层提供标准化的开放访问接口,主要提供如下功能:数据创建、数据存储、数据查询、数据更新、数据删除、数据安全、事务支持、数据备份/恢复。由此可知,如果简单的理解为数据库层,那么就忽略了xml 文档,更重要的是不能体现数据层提供访问接口的要求。
        考虑一个银行的帐务系统,这个系统的用户界面层就有银行柜台的终端机、ATM机、网上银行的浏览器等,如果不采用分层的技术,那么会是怎么样一种情况呢?

        如果要采用面向对象的方法实现三层结构,涉及到的技术是相当多的,OOA/OOD,UML,UP等等。

        采用分层的方式实现系统,比不采用分层的实现方式工作量要大,开发周期要长(因为要编写更多的代码),那为什么要这样做呢?我想主要的原因是分层具有更大的灵活性、易维护性、可重用性——当你写完第一个分层的系统,做第二个的时候,会发现有很多的东西是可以重用的——这些都是衡量软件质量的重要标准。

        对于数据层,Ado.net 已经为我们提供了丰富的功能,同时“Microsoft Application Blocks for .NET”(http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp)也是一个不错的选择。
        对于业务逻辑层,是我们需要集中精力考虑的重点,要在这一层将所有的业务规则完整的封装起来。


        我曾经以为分层就是将各层做成 dll 这样的模块,但是,这是将分治与分层混淆了——它们还是有不少的共同点的:都是将复杂的问题简单化,都是将功能模块化。但是分治强调的是将有机的整体分隔成更小的单元,是一种垂直的划分;而分层强调的是将有机的整体分割成具有顾客和服务者关系的独立单元,是一种水平的划分。


        还有一个比较重要的层:网络访问层。这个层在web 服务类别的项目种体现的并不明显(浏览器与IIS处理了这个层的问题),但是当采用winform作为用户界面层访问业务规则层的时候,或是异构系统的互连(unix,linux,windows)的时候,这是一个必须认真对待的层。