代码改变世界

常用的分层架构设计

2011-10-17 12:10  张剑  阅读(908)  评论(1编辑  收藏  举报

童鞋们在编写软件系统时经常面对这样一些问题:
1.程序写好能运行就可以了,为什么要多此一举进行分层?
2.分层的概念是什么?
3.那么如何进行合理分层,分的层次越多越好吗?

解决问题的答案:
答1: 程序能运行就OK了,分层干嘛?有一组关于软件开发成功率的报告(Standish Group报道的软件项目成功率)中提到: 1994软件项目成功率为16%、 2001为28%  、2003为31% ,我们没有得到近些年的数据,但是从这些简单的数据来看,我们每年以1.7%的速率呈直线型增长。如果持续以现在的速率增长,我们在2014年才会达到50%的成功率。这意味着,客户(需求方)永远不会满意你所写的软件,客户可能需要修改逻辑,需要增加功能,需要跟据自己的需求来变更用户体验(用户界面及操作方式等)。直到达到他的要求之前,你的程序是不断变化着的。所以我说亲爱滴童鞋,不分层,你伤不起。


答2:为了层就能解决客户在需求上的变更了吗?这样做还有什么好处?那么我们来给大家解释一下关于软件开发中分层的概念:分层架构,实际上就是我们经常挂在嘴边的三层架构,对于面向对象编程中,不论分到多少层,不外乎都是对这三层的细划。这三层分别是:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。一个程序正是因为构建了这些层次,才可以在不断变化的需求中成长并结果。我经常给学员用齿轮来描述这三层之间的关系,不论那一个齿轮有变化,比如变大、变小、质量变化等,只要锯齿能耦合在一起就不会影响到其它的齿轮。这样的好处就是,我们只需要关心其中一层的变化,而不用去关心其它层。当然前题是层与层之间要有好的接口,就像齿轮一样能耦合在一起互相影响,但是又可以互相独立。

答3:那么如何进行分层呢?层次的作用分别是什么?其实分层设计是面向对象设计中最常见的一种,很多朋友应该听说过“设计过度”这个概念。其实在分层设计中这种错误是常见的,就是在没必要的项目中使用过与复杂的分层设计。也就是说,我们要如何分层,得根据项目的需求来确定。首先我们来看一下在传统的三层架构中层次的作用,并且我们将三层再细划分一下。然后再结合项目的大下来决定设计的程度。

常见的三层:
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。   
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层中方法的调用,对数据业务逻辑处理。   
3、数据访问层(DAL):主要用于操作数据的增、删、改、查等,包括数据实体等。可以使用XML对象或文件操作对象来管理文件数据、也可以使用ADO.NET中的对象操作数据,同样也可以使用.NET中的ORM框架Entity Framework 来完成,但是这样对数据库的依赖较大。

较细的分层:
1、表现层(UI):于常见三层作用相同。
2、业务逻辑层(BLL):于常见三层作用相同。
 3、数据访问层接口(IDAL):用于创建针对表或视图或事务的操作方法接口
 4、数据访问层实现(DAL、SqlServerDAL、OledbDAL):根据不同的数据库提供程序类库来实现IDAL接口,将增删改查具体化到某种数据提供对象和执行对象。
 5、数据实体(Model):针对表或视图创建的数据实体。
 6、工厂(Factory):通过简单工厂及反射等技术实现依赖注入,有利于多种数据库应用。

更细划的分层:
-------------表现层------------------------
1、表现层(UI):于常见三层作用相同。
-------------业务层------------------------
2、业务逻辑层(BLL):根据指定的请求(事件)调用切面层方向。
 3、切面层(AOP):通过事务,将实现某一个功能的,多表操作的方法(DAL中的方法)整合起来,并被BLL调用。
-------------数据访问层-------------------
 4、数据访问层(DAL):针对表或视图创建的对于或视图的增删改查功能。
 5、数据实体(Model):针对表或视图创建的数据实体。
 ------------核心可复用代码层--------------
 6、数据工厂(Factory):通过抽象工厂及反射等技术实现依赖注入,有利于多种数据库应用。
 7、数据操作者(Helper):包括数据操作者的接口及接口实现,主要为Provider中对象的一些执行方法。
 8、数据提供者(Provider):包括Provider的接口和不同数据提供者的实现,主要为Helper提供操作对象。

          通过上面描述,我们大概清楚了简单分层与详细分层的方式,当然在详细分层中还有很多方法,这里提出来的是我常用的方式。

         那么我们接下来要了解的就是在什么样的项目中,需要应用分层?或分层应该到什么样的程度?这里还要提一点,除项目作为决定分层程度的因素外,还有一点就是“人”的因素。如果读者还是初学者,那么我建议是不论你手里能拿到什么项目,我们先从最简单的三层开始实现。如果有一定的编程基础,能理解面向对象编程的优势了,那么你可以因项目而定,在复杂的、需求变化可能性较大的工程中使用详细的分层设计了。也就是说,不论大型项目或者中小型项目,我们在设计分层时,主要关注该项目在未来的变更程度。比如在WEB开发中,经常接到一些企业WEB站点,基本上一次成型后很少有变化,那么这时就可以使用简单的分层就可以了。如果要实现的是一个企业级应用程序,从业务流程到用户体验都有可能出现变更,那么这种情况下就可以使用分多层的架构去实现。