『 天道酬勤 』 李天平的博客


君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。
posts - 127, comments - 2848, trackbacks - 83, articles - 18
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

分层开发思想与小笼包

Posted on 2005-12-03 01:34 李天平 阅读(14303) 评论(23) 编辑 收藏

早上吃早点的时候,突发灵感,结合吃的小笼包和日常的开发经验来说一下分层的应用。 
首先,谈一下什么是层架构,所谓的层开发就是将整个业务应用划分为表示层-业务逻辑层―数据访问层-数据库等,有的还要细一些,明确地将客户端的表示层、业务逻辑访问、和数据访问及数据库访问划分出来,十分有利于系统的开发,维护、部署和扩展。 
软件要分层,其实总结一句话,是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。  
这种三层结构有什么优势呢?  

 1. 通过将整个系统分为不同的逻辑块,大大降低了应用系统开发和维护的成本。 
 
三层结构将表示部分和业务逻辑部分按照客户层和应用服务器相分离,客户端和应用服务器、应用服务器和数据库服务器之间的通信以及异构平台之间的数据交换等都可以通过中间件或者相关程序来实现。当数据库或者应用服务器的业务逻辑改变时,客户端并不需要改变,反之亦然,从而大大提高了系统模块的复用性,缩短了开发周期,降低了维护费用。 
 
趣味理解 
 假设饭店这样来做小笼包:  
    一层蒸饺,  
    一层肉包,      
    一层素包。  
首先这种方式我们可以让做包子的分成不同的小组,来负责做不同的包子。当做好了每一种包子,他们可以很方便的知道,该放到哪个笼里,不至于挨个去查看该放在哪里,我们也很容易地将笼屉放到火上面去,而不会影响其他笼的加热。当我们要吃肉包或蒸饺时,我们也很容易就能找到我们所需要的,非常节省时间和体力。把肉包或蒸饺拿走或者增加,并不影响素包的加热。  
如果我们把这些都放在一个大笼里,你觉得会怎么样?会不会很乱,维护起来很浪费时间,不但找起来麻烦,而其每次揭开锅都会对其他的有影响。   

2. 将数据访问和逻辑操作都集中到组件中,增强了系统的复用性。  

如:将数据访问集中到数据访问层的组件中,从而减少了应用程序中的重复代码,每个需要访问数据库、表的窗体都使用相同的组件。  

如:一些共性的逻辑操作都集中封装在逻辑层的组件中,每一个使用该方法的操作,可以共享来访问该组件。  

趣味理解:  

简单的理解,笼屉本身就是一个重用的例子,如果我们使用一次性的笼(像一次性筷子一样理解),会浪费多少人工来做啊(重复编写麻烦),并且会有很大的资源浪费(代码冗余),最后还要进行垃圾处理(后期维护)。并且,如果笼屉和炉火的锅按一种规范和标准(接口)来做,这样的笼屉不但可以在这里用,也可以拿到别的地方用。(虽然这样理解不太确切,简单的这样理解好了)  

3. 系统的扩展性大大增强。  

模块化使得系统很容易在纵向和水平两个方向拓展:一方面可以将系统升级为更大、更有力的平台,同时也可以适当增加规模来增强系统的网络应用。由于摆脱了系统同构性的限制,使得分布数据处理成为可能。在扩充或修改功能时,基本不会破坏原有结构的稳定性。  

趣味理解:  

随着顾客的需要,我们现在需要增加新品种,如蒸馒头,蒸地瓜,那么直接可以增加一层笼就是了,对其他笼不会有什么影响。   

三层结构在营造企业竞争优势中的作用主要体现在模块化设计使得用户在现有结构的基础上实现了系统扩展,从而提高企业信息化的速度和业务水平;同时三层结构中中间件的出现使得用户可以直接从市场上选择合适的产品来构建系统,大大降低了开发周期和开发费用。   

但分层结构也有缺点也不是越多越好,那样管理很多层会比较麻烦,运行效率可能比较低。所以,一个具备良好层次结构的系统,其层的数目要恰到好处才行。   

(作者:李天平    转载请注明)

 

Feedback

#1楼  回复 引用 查看   

2005-12-03 11:45 by 听棠.NET      
非常支持楼主的意见。分层的撑握是需要视项目而定的。
但分层是系统扩展性的一个必要条件,楼主有兴趣看看我的SPL(SmartPersistenceLayer),或许会有兴趣吧。http://tintown.cnblogs.com/category/12787.html

#2楼  回复 引用 查看   

2005-12-03 15:43 by POLARIS      
有点意思。我感觉分层主要是要符合高内聚、低耦合的原则。这是我们写程序的核心

#3楼  回复 引用   

2005-12-03 20:08 by mzl[未注册用户]
不错!

#4楼  回复 引用 查看   

2005-12-04 00:43 by calvin      
@李天平:

赞同你的说法,项目的层次要视项目的规模和业务复杂程度而定。对于简单的项目,采用复杂的分层,是一种负担,简单的应用因为分层而要多写很多的代码,非常的不xp。

同时,组件化、模块化的思想也非常重要,代码级别的复用或者reinvent the wheel的方式难以满足快速构建项目的要求,成熟、灵活和高度可复用的组件(还有种说法是基础框架)是IT企业的核心竞争力。

#5楼  回复 引用   

2006-01-01 15:34 by asweisun[未注册用户]
目前在学软件分层思想,
在学asp.net 分层架构,不知道楼主有没有这方面的入门的资料介绍介绍.
看了楼主开发的代码自动生成器.不过还不是很明朗^^

#6楼  回复 引用   

2006-01-01 16:04 by 李天平[未注册用户]
http://ltp.cnblogs.com/archive/2005/12/28/306887.aspx
除了有代码生成器外,还有一套基于分层思想开发的系统示例源码,你可以下来看看,自己学习一下。同时,代码生成器帮助里有一点介绍。

#7楼  回复 引用   

2006-05-25 13:51 by 飘渺峰[未注册用户]
那么
实体和数据库基础类应该放在哪一层啊

#8楼  回复 引用 查看   

2006-08-07 09:11 by safeking      
@飘渺峰
实体和数据库基础类应该是数据访问层的吧

#9楼  回复 引用 查看   

2006-09-13 18:09 by SoftWareBoy      
向楼主学习!
我现在还是菜鸟!

#10楼  回复 引用 查看   

2006-10-16 11:56 by 小鱼儿      
好东西!学习

#11楼  回复 引用 查看   

2006-10-16 11:56 by 小鱼儿      
好东西!学习

#12楼  回复 引用   

2006-12-21 13:34 by lcj[未注册用户]
写的很好!很容易让人理解!

#13楼  回复 引用 查看   

2007-03-08 21:44 by 西门子乌      
实体应该属于业务模型,单独放到一个项目中,便于在表现层和业务逻辑层之间传递,.Net中一般用Typed DataSet;数据库基础类属于数据访问层。最好用泛型封装成单表操作,然后用AOP在业务逻辑层控制事务。

#14楼  回复 引用 查看   

2007-03-10 08:35 by Hsjtai      
很谢谢版主的文章!本人对三层(多层)开发很有兴趣,但好象还不能较深入的理解和应用,不知能否提供一些三层(多层)设计方面的文章和实例给我学习呢?谢谢!QQ:1095208 hsjtai@sina.com oldyongs.cnblogs.com

#15楼  回复 引用   

2007-03-10 10:01 by -天道酬勤[未注册用户]
@Hsjtai
http://www.maticsoft.com/softdown.aspx

#16楼  回复 引用 查看   

2007-03-12 12:30 by Anders.Zhao      
@Hsjtai
我觉得 微软的PetShop和Duwamish就是很好的例子,你可以参考一下.相差的学习资料很多

#17楼  回复 引用   

2007-03-25 23:57 by 理解万岁
高内聚、低耦合
那位能够更详细解释。
请教

#18楼  回复 引用   

2007-06-04 08:09 by Melon[未注册用户]
还没有完全用三层的思想来设计过系统.以后多多学习,感谢!

#19楼  回复 引用   

2007-10-29 21:13 by 翔鸿(半山旅客)
学习,期待有新成果

#20楼  回复 引用 查看   

2008-02-27 10:09 by arjoe      
有点意思,希望能有更具体的例子呵!谢谢!

#21楼  回复 引用 查看   

2008-03-03 09:48 by floodpeak      
楼主的比喻很形象,不错

#22楼  回复 引用 查看   

2008-06-05 15:27 by Kai.Ma      
比喻贴切

#23楼  回复 引用 查看   

2008-06-21 09:00 by BruceZhou      
不错

#24楼  回复 引用 查看   

2008-08-06 12:29 by 陈晨      
--引用--------------------------------------------------
POLARIS: 我感觉分层主要是要符合高内聚、低耦合的原则。这是我们写程序的核心
--------------------------------------------------------
赞同,个人理解分层是高内聚低耦合的一种实现方式
尤其是在大型项目中,也便于实现团队之间的分工合作