《软件设计精要与模式》各篇之篇首语
《软件设计精要与模式》(原名《设计之道》)共分为五篇共28章内容。以下是各篇的篇首语,敬请各位斧正。
第一篇 设计之要
永远不要低估设计的能量,特别是那些以设计优雅的软件为最高目标的软件设计师们。然而,我们也不能高估设计的威力,以至于在将软件设计思想供奉在穹顶高悬的殿堂最高处的同时,还要卑躬屈膝地对它顶礼膜拜。归根结底,软件设计不过是软件开发进程中一环不可或缺的链条而已。就是这样,我们毋需为她蒙上神秘的面纱,毋需为他戴上帝王的冠冕。
美的设计是一门艺术,可用的设计则是一门科学,软件设计更是如此。那么,设计是否有标准呢?我想起赫拉克利特的一句话:“人不能两次走进同一条河流”,这意味着一种经验是不可重复的。然而,软件设计却与那奔腾不息的河流不同,其中包含的奥秘仍有规律可循。那么,设计的高下之分,就在于设计师们是否掌握了设计的规律,或者说我们需要分辨哪些要素方才是软件设计之要?
不过,谁又敢说自己完全掌握了所有的设计之要呢?面向对象的设计思想、设计模式、重构、测试驱动开发、极限编程……设计之道是无止境的,我们能够挖掘出来的设计之要又何尝不是冰山之一角呢?
第二篇 .NET Framework与设计模式
从.NET Framework挖掘设计模式的范例,对于设计模式的实践具有重大的意义。一直以来,设计模式虽然被众多专家与开发者推崇,然而,一味地进行理论的介绍,会使得设计模式的运用流于空泛。大多数介绍设计模式的文章,并不乏实际例子的支持,但作者为了更通俗易懂的说明设计模式的主旨与精髓,往往采用了非常简单且不具备实际项目意义的实例进行阐述。这些例子,用于初学固然效果不错,但要求开发者能够熟练地将设计模式运用到项目中,常常会有无从下手的感觉。
.NET Framework对设计模式的应用无疑更具有说服力。既然在如此重量级的框架产品中,设计模式展示了它无与伦比的优雅与精巧,正可以鲜活地说明设计模式在软件开发中的重要地位。从这些充满了设计美感的代码作品中,吸取养料,并由此印证自己对设计模式的理解,无疑是一种愉快的体验。仿佛读了一本好书,看了一部精彩的电影,欣赏了一场绝妙的音乐会,是一种灵魂的畅快淋漓。
与设计师的心灵对话,就从这一段段美妙的代码开始……
第三篇 媒体播放器的设计之旅
媒体播放器并不是一个巨兽一般庞大的项目,但在设计上却也颇费周章。任何项目都不是一蹴而就的,在经历媒体播放器的设计之旅时,我们就像一个冲向魔兽世界的猎人,面对软件设计中僵化的部分,张开弓弩来寻求解决之道。
需求变化是设计的敌人,僵硬的设计却是软件开发过程中的“第五纵队”,如果不加以重视,就会有分崩离析的危险。因此,在设计媒体播放器的过程中,我们一直在与项目结构的僵化问题作着艰苦的战斗。面对不同的需求场景,我们尝试了十八般武艺,引入了面向对象设计思想,引入了设计模式中的Factory Method模式、Adapter模式、Decorator模式以及Visitor模式。显然,我们运用这些武器还称得上圆熟自如,发挥了足够的威力。设计之旅充满了冒险,但随着僵化的问题迎刃而解,我们虽然还在路上,距离成功却已经不远了。
第四篇 设计模式应用实践
现在,我们是时候从实验室中走出来了。并非所有激动人心的事物都是从实验室中创造出来的。如果莱特兄弟没有经历数百次的试飞,人类的第一架飞机也就无法在蓝天中自由飞翔。通过应用实践获取的经验,远比静坐在实验室中的冥思苦想来得更真实与刻骨铭心。实践的价值显然远远超过实践本身的意义。
三百多年前,一个苹果掉在牛顿的头上,于是伟大的万有引力定律产生了。人们似乎总是惊诧于这种神奇的魔力,却忽略了牛顿在思考万有引力的时候,曾经做过的千万次演算与推导。正如那个神奇的苹果掉在我们头上,诞生不了万有引力定律;我们不能抱有侥幸的妄想,希望偶然地灵机一动,就能熟练地掌握设计模式。
设计模式是千锤百炼的结果,是面向对象设计思想的集大成者。要掌握它,必须经历项目实践的锤打。这个过程不一定愉快,甚至是一种磨砺,但却独具魅力,是巨大的价值所在。“无限风光在险峰”,但谁又能说,攀登山峰的沿途风景就不壮观与美丽呢?
第五篇 .NET体系架构设计
缺乏优秀的设计,软件开发就会陷入混乱。开发人员就像那抓不住线球的猫儿一般,扑来扑去,线球始终不在掌握之中,越滚越远,越滚越乱。细节的设计决定我们能否理清线团的缠绕方式,但真正决定我们能否将整个线团完全掌控在股掌之中的,是项目的体系架构设计。
相对于设计模式而言,体系架构设计无疑是更高层次的设计视角。它几乎涵盖了软件开发领域的方方面面,这就要求架构师必须掌控全局,否则就会陷入收之桑榆,却又失之东隅的困境。
要成长为一名优秀的架构设计师,绝非一朝一夕之功。最重要的途径是大量的项目实践,此外就是学习与参考优秀的设计范例。作为Microsoft展示.NET技术在企业系统开发方面能力的示例项目,PetShop的体系架构设计无疑值得我们学习。或许,我们对PetShop的审视与解剖,不过是一种管窥蠡测;但它至少教会我们知晓一种方法,就是只要我们不去拉动那根混乱之源的线头,那么整个线团终究会被我们掌握在手中。