[从架构到设计]第一回:设计,应该多一点
设计就像是转魔方,你必须面面俱到。
1. 引言
anytao开始想尝试尝试写点设计的东西了,只所以有了这个“突如 其来”的想法,原因其实很简单:因为对设计、架构、分层、模式,我很陌生。因为陌生,所以接触,因为接触,所以随笔。系列之构思就这么诞生了。因此,这个 系列是个方法论,是个杂文集,也是个见证史。我不期望能收获多少掌声,但求能保持更多交流。作为技术的狂热追求者,我始终认为两件事情是技术的立命之本:
- 底层、框架,因此有了[你必须知道的.NET]系列,以追求技术细节
- 设计、架构,因此有了[从架构到设计]系列,以追求技术宏观
因为,你会发现在日新月异,纷繁复杂的技术领域里,一切都在变,一切都在赶,我们拼命的狂追,换来一片的豪赌。唯一不变的,一是底层,二是设计。所以我只关注这两个,也只关注这两个,这是我认为的学习方法论中的第一守则:确定不变的追求方向。
那么这个系列将关注些什么方向呢?
- Architecture---架构
- Method&Process---设计方法与设计过程
- OO--面向对象
- Design Pattern---设计模式
- Learning Method---学习方法论
2. 从架构到设计
当年,petshop作为.NET和J2EE两个派别之争的产物,坐在了潮流的风口上,时间已然过去,当时硝烟早已消失。我们庆幸的是petshop一路走来,从1.0到4.0,综观其设计的脉搏,能够感受到架构的日渐成熟和演变,这是技术之争留给我们最大的看点。
(图片来源:MSDN)
从1.0的简单3层BS系统架构,到4.0实现较复杂的分层结构,同时引入数据缓存、异步处理机制,petshop成为典型的分层结构的代表为架构设计的学习提供了良好的资源与素材。从历史的遗迹中,我们挖掘到的是什么?
- 思想:分层架构,3层也好,7层也罢。根据的是具体的系统需求而定,但是基本的表示层、业务逻辑层和数据访问层的有机划分,是一种导向。而由分层带来的性能影响,可以通过数据缓存、异步处理机制来弥补。
- 方法:模式就是方法,petshop中就不乏模式的大量应用与技巧,抽象工厂模式完成对象创建;策略模式封装业务行为。
- 策略:面向接口的设计,剥离了层与层之间的强耦合,使得各个模块保持相对的独立性,体现了封装变化的基本思想。
- 技巧:表现层中以masterpage来实现对页面的控制,既省时又省力。
- 缺陷:没有应用ORM,数据和实体的分离不够彻底。希望在5.0中有更好的方案。
没有一成不变的设计,也没有一成不变的架构。方案是永远随着需求,随着技术而不断重构,设计之美就体现在不断的否定与自我否定中。本系列不是讨论petshop的专题,这方面的讨论已经很多了,我们没有必要再造轮子。因此,更关注如何,怎样和思想,是这里的讨论。
那么,设计、架构应该从哪儿入手,又如何进行?面向对象的原则又是什么?设计模式又如何融入到我们的架构体系中?这一系列的问题,我想说可能根本没 有答案,而确有方法。本系列就力图从方法的角度入手,以并非专业又并非经验的视角来阐释如何以菜鸟的立场来“空谈”设计。因为,你不能说设计只是架构师的 事儿,否则满篇的代码又如何体现艺术之美呢?作为菜鸟, 我们少了经验,但是多了思考,因此对架构、对设计、对模式的探索,应该从一定的方法做起,这是本 文和本系列试图达到的目标。
作者力图以例小心求证设计,以图来大胆阐释方法。例如,软件设计的分离点应该如何来考虑呢?
- 首先,分层思想是从职责角度对架构进行了约束,表现层、逻辑层、数据层各负其责,层与层之间以接口进行信息交互,减少耦合度。
- 其 次,框架和通用组件则是从通用性角度提高了系统复用并减少耦合度,例如,在一个应用系统中,.NET Framework是技术通用组件,提供了系统开发数以千万计类,而系统中的进度控制、消息控制和异常处理可以开发为专用的模块,作为领域通用组件,然后 在此基础上再实现具体的业务需求。
- 最后,模块化思想则是从功能点对系统进行了分离与封装。一个大型的系统,一定是分成多个功能模块进行的开发,每个子模块甚 至也有必要进行架构设计和粒度划分,这主要依赖与其在系统中的复杂度和重要度。核心的子系统设计,最好落实到具体的类设计,对粒度的把握也是架构设计值得 思考的话题。
分层角度,框架基础,功能划分,一个系统设计要综合考虑这些因素。可能还不止这些,也可能只是其中的一点,具体的架构要看具体的需求。然而探求架构和设计方法的时候,我们要把握基本的方法和思路去迎合前人总结的经验,也叫科学。
以上述思路来回顾petshop 4.0的架构,我们很明显的感受到,良好的设计正是巧妙的耦合了架构设计中的诸多因素,提出了近乎完美的方案。分层角度来看,在petshop中自不必 说,明显的三层架构体现了良好的系统分离与耦合;通用角度来看,.NET Framework作为技术通用组件,提供了系统实现的基本技术基础,而对Profile和Membership的分离,则体现了领域通用部分的价值;模 块角度来看,由于petshop本身的业务需求比较简单,因此模块划分不够明显,但是对Order的处理可以看作简单的业务模块了。而其他方面,例如设计 模式,面向接口开发的技术,也同样体现在petshop的大框架中,让我们受益非浅。
3. 结论
从架构到设计,漫游在一个技术而艺术的世界,一直是我的梦想。对技术的驾驭,不是看你了解多少细节,更重要是你控制了多少格局。架构设计就是一个控 制格局的艺术,只有游刃有余的驾驭了如何将技术细节变成就轻驾熟的应用,才是设计的最高境界。届时,你会发现,原来技术可以更美的。所以,我要说,设计, 应该多一点。
参考文献
(中国)温昱,软件架构设计
(USA)Geoffrey James,The Tao of Programming