系统设计背后的基本思想与原则

重用、扩展、变化、分离、简约、一致、间接
服务器君一共花费了159.576 ms进行了5次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

GoF之一的John Vlissides著作《设计模式思考》,在James O. Coplien为本书所撰写的序中,摘引了Richard Helm的一封邮件:

GoF的设计模式只解决了微观架构(micro-architecture)。你仍然必须把宏观架构(marco-architecture)设计好:分层、分布、功能隔离……。而且就像Cope说的,你仍然必须把纳米架构(nano-architecture)设计好:封装、liskov……。

我很赞成这种根据设计粒度来划分架构的方式。从严格意义上讲,软件设计也可看做是架构的一部分。从marco-architecture到micro-architecture,再到nano-architecture,是一种设计粒度的自上而下。但在架构过程中,我们并非一定要从宏观到微观,再到更为具体的细节,这些架构其实是平等的。这几种粒度的架构,似乎存在某些玄奥的原则与设计精神,贯穿其中。我以为,如果能把握它们之间的脉络,甚至通过某种方式将它们串联起来,形成一种有机结合或者说浑然一体的架构,对于我们的架构与设计而言,无疑会带来极大的帮助。

最近一年来,我一直在思考隐藏在设计背后的基本思想与原则。因为在纷繁复杂的模式中,我们很容易迷失自己,要么患上模式病,要么在选择模式方面变得无可适从,或者就干脆鄙视模式,按照自己的一套方法野蛮施工。不幸的是,这种野蛮施工在有时候确乎能取得不错的效果。然而,这无疑落入了一种类似“按巧合编程”的反模式陷阱中,我将其称之为“按巧合设计”,即在项目或产品设计过程中,因为偶然原因,设计取得成功,从而给设计者带来错觉,以为寻觅到了某种“放之四海皆准”的终南捷径。

我对设计的思考总结而言,包括七个方面,即“重用、扩展、变化、分离、简约、一致、间接”。我在多次会议上也阐述和分享了我的这些想法(当然,这些想法绝非我的独创,有很多其实本身就是业界公认的原则,我不过是期望能够融为一体地来阐述架构与设计这一命题。)然而,囿于自身经验与能力,我还未能将其总结得更好。我对设计模式(即所谓微观架构)的理解是有几分自信的,对于OO的基本原则(即所谓纳米架构),也可以说是深谙于心,但对宏观架构的把握,还欠缺几分火候。我始终感觉我的总结有一些散,我追求的设计原则,应该像散文的精神那般,能够做到“形散而神不散”,而现在对设计的理解正好缺乏某种能够符合类似天体运行规律的链条所在。Richard Helm对架构的叙述,为我打开了一扇窗户。

此外,通过我这几个月负责的产品研发,我对UML的理解也更近了一层。我越来越觉得UML对架构和设计的帮助。正如Craig Larman的那本名著《Applying UML and Patterns》,UML与模式可以结合得更紧密一些。UML的重要性不言而喻,如果有人对其产生轻视,乃至于鄙视,归根结底,一定是对UML进行了误用或者滥用。UML是工具,但它不同于普通的工具,它能够启发我们的设计。例如用例图可以帮助我们识辨角色与场景,还可以帮助我们找到能够重用的元素。组件图无疑属于宏观架构的范畴,它帮助我们体会封装与松散耦合,还能够帮助我们定义服务。我不认为从一开始,就只能利用组件图来划分模块,毕竟在很多时候,我们很难完全对模块进行分解。但如果能够合理地利用组件图,对模块的划分无疑会变得轻松许多。在微观架构的层面,我特别喜欢时序图(sequence diagram),在我心中,它的重要性甚至胜过测试驱动开发。结合用例图,它能够帮助我们找到对象协作的顺序与方式,帮助我们找到抽象以及接口,当然还包括对象的职责。我们还可以适当地结合ICONIX方法,并结合原型,来帮助我们对用例场景的理解,并最后找到必须、应该且恰如其分地需要参与到这一场景中的业务对象。

从架构的角度来看,我们需要将自上而下与自下而上两种方式进行结合。此外,我们必须遵循所有层级架构都应遵循的原则,例如高内聚、松耦合以及关注点分离。我在思考,这些基本原则,似乎正是我要寻找的穿起纳米架构、微观架构和宏观架构的链条呢?如果是,我们该怎样运用它们。毕竟,对于大多数设计者而言,这些原则都太空泛,太抽象,以至于落入玄奥的“道”中无可自拔。架构与设计自然有其玄妙之处,有其不可言传之处,但如果一味地故弄玄虚,并不利于设计者的提高。因此,对我而言,我希望能够提供大量的案例,来佐证这些原则;更重要的不是佐证,而是指引,以好的例子,甚至可以称为典范的例子,展现这些精妙的原则,使得我们的开发人员都能够看懂,都能够理解设计的妙处。这是我努力期望做到的。

本文地址:http://www.nowamagic.net/librarys/veda/detail/231,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/231

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《大话设计模式》 程杰 (作者)

《大话设计模式》通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GoF(设计模式的经典名著——Design Patterns: Elements of Reusable Object-Oriented Software,中译本名为《设计模式——可复用面向对象软件的基础》的四位作者Erich Gamma、Richard Helm、Ralph Johnson,以及JohnVlissides,这四人常被称为GangofFour,即四人组,简称GoF)总结的23个设计模式。本书共分为29章。其中,第1、3、4、5章着重讲解了面向对象的意义、好处以及几个重要的设计原则;第2章,以及第6到第28章详细讲解了23个设计模式;第29章是对设计模式的全面总结。

更多计算机宝库...