早上吃早点的时候,突发灵感,结合吃的小笼包和日常的开发经验来说一下分层的应用。
首先,谈一下什么是三层架构,所谓的三层开发就是将整个业务应用划分为表示层-业务逻辑层―数据访问层-数据库等,有的还要细一些,明确地将客户端的表示层、业务逻辑访问、和数据访问及数据库访问划分出来,十分有利于系统的开发,维护、部署和扩展。
软件要分层,其实总结一句话,是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。
这种三层结构有什么优势呢?
1. 通过将整个系统分为不同的逻辑块,大大降低了应用系统开发和维护的成本。
三层结构将表示部分和业务逻辑部分按照客户层和应用服务器相分离,客户端和应用服务器、应用服务器和数据库服务器之间的通信以及异构平台之间的数据交换等都可以通过中间件或者相关程序来实现。当数据库或者应用服务器的业务逻辑改变时,客户端并不需要改变,反之亦然,从而大大提高了系统模块的复用性,缩短了开发周期,降低了维护费用。
趣味理解:
假设饭店这样来做小笼包:
一层蒸饺,
一层肉包,
一层素包。
首先这种方式我们可以让做包子的分成不同的小组,来负责做不同的包子。当做好了每一种包子,他们可以很方便的知道,该放到哪个笼里,不至于挨个去查看该放在哪里,我们也很容易地将笼屉放到火上面去,而不会影响其他笼的加热。当我们要吃肉包或蒸饺时,我们也很容易就能找到我们所需要的,非常节省时间和体力。把肉包或蒸饺拿走或者增加,并不影响素包的加热。
如果我们把这些都放在一个大笼里,你觉得会怎么样?会不会很乱,维护起来很浪费时间,不但找起来麻烦,而其每次揭开锅都会对其他的有影响。
2. 将数据访问和逻辑操作都集中到组件中,增强了系统的复用性。
如:将数据访问集中到数据访问层的组件中,从而减少了应用程序中的重复代码,每个需要访问数据库、表的窗体都使用相同的组件。
如:一些共性的逻辑操作都集中封装在逻辑层的组件中,每一个使用该方法的操作,可以共享来访问该组件。
趣味理解:
简单的理解,笼屉本身就是一个重用的例子,如果我们使用一次性的笼(像一次性筷子一样理解),会浪费多少人工来做啊(重复编写麻烦),并且会有很大的资源浪费(代码冗余),最后还要进行垃圾处理(后期维护)。并且,如果笼屉和炉火的锅按一种规范和标准(接口)来做,这样的笼屉不但可以在这里用,也可以拿到别的地方用。(虽然这样理解不太确切,简单的这样理解好了)
3. 系统的扩展性大大增强。
模块化使得系统很容易在纵向和水平两个方向拓展:一方面可以将系统升级为更大、更有力的平台,同时也可以适当增加规模来增强系统的网络应用。由于摆脱了系统同构性的限制,使得分布数据处理成为可能。在扩充或修改功能时,基本不会破坏原有结构的稳定性。
趣味理解:
随着顾客的需要,我们现在需要增加新品种,如蒸馒头,蒸地瓜,那么直接可以增加一层笼就是了,对其他笼不会有什么影响。
三层结构在营造企业竞争优势中的作用主要体现在模块化设计使得用户在现有结构的基础上实现了系统扩展,从而提高企业信息化的速度和业务水平;同时三层结构中中间件的出现使得用户可以直接从市场上选择合适的产品来构建系统,大大降低了开发周期和开发费用。
但分层结构也有缺点也不是越多越好,那样管理很多层会比较麻烦,运行效率可能比较低。所以,一个具备良好层次结构的系统,其层的数目要恰到好处才行。
(作者:李天平 转载请注明)
评论
但分层是系统扩展性的一个必要条件,楼主有兴趣看看我的SPL(SmartPersistenceLayer),或许会有兴趣吧。http://tintown.cnblogs.com/category/12787.html 回复 更多评论
赞同你的说法,项目的层次要视项目的规模和业务复杂程度而定。对于简单的项目,采用复杂的分层,是一种负担,简单的应用因为分层而要多写很多的代码,非常的不xp。
同时,组件化、模块化的思想也非常重要,代码级别的复用或者reinvent the wheel的方式难以满足快速构建项目的要求,成熟、灵活和高度可复用的组件(还有种说法是基础框架)是IT企业的核心竞争力。 回复 更多评论
在学asp.net 分层架构,不知道楼主有没有这方面的入门的资料介绍介绍.
看了楼主开发的代码自动生成器.不过还不是很明朗^^ 回复 更多评论
除了有代码生成器外,还有一套基于分层思想开发的系统示例源码,你可以下来看看,自己学习一下。同时,代码生成器帮助里有一点介绍。 回复 更多评论
实体和数据库基础类应该放在哪一层啊 回复 更多评论
实体和数据库基础类应该是数据访问层的吧 回复 更多评论
我现在还是菜鸟! 回复 更多评论