userdefinerace 2011-08-11
在我们身边,有些问题反复出现,而我们总是能够成功的解决,但却没有及时总结,升华思想;有些方法总是导致我们失败,我们却也没有及时吸取教训。作为软件开发人员,也不能例外。那么,不妨让我们看看软件开发中的模式,以及一些大师们经典著作,希望能对以上问题提供解决思路。
何为模式?
模式一词最早源于建筑行业,但是如今含义和范围已经非常广泛,它标志了物件之间隐藏的规律关系,而这些物件并不必然是图像、图案,也可以是数字、抽象的关系、甚至思维的方式。模式强调的是形式上的规律,而非实质上的规律。前人积累的经验的抽象和升华。简单地说,就是从不断重复出现的事件中发现和抽象出的规律,对解决问题的经验的总结。只要是一再重复出现的事物,就可能存在某种模式。 简而言之,模式就是解决某一类问题的方法,而一般情况下,这种方法是可以被升华到理论,向更多人推广和共享。
软件开发中有哪些模式?
模式一词也只是在八十年代,被Kent Beck等人引入软件开发领域。那么软件中到底都有那些模式呢?下面我就针对软件开发中存在的一些模式做一些总结。
1、 代码模式或者成例。
这类型的模式往往是最低层的模式,基本上和代码或者某种开发语言有很强的相关性,是实现某个具体功能最佳编码实现方式。比如:java script如何实现飘动文字、进程互斥、双检锁等都可以作为代码模式或者成例,甚至于一些常见的经典算法。
若对这方面知识感兴趣,我推荐两本书:
一是《代码大全》,此书是是著名IT畅销书作者Steve McConnell的经典之作,两届震撼大奖得主,数十年软件开发智慧。
二是《Effective C# (中文版)改善C#程序的50种方法》, 本书作者Bill Wagner是世界知名的.NET专家,微软C#领域的MVP。此书围绕一些关于C#和.NET的重要主题,包括C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等,讲述了最常见的50个问题的解决方案,为程序员提供了改善C#和.NET程序的方法。
2、 设计模式。
提起软件模式,可能大家第一个想到的就是设计模式了,设计模式解决的往往面向对象设计中对象之间的关系。可使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
通常情况下,设计模式指的是GOF 在1995提出的23种模式,其第一次将设计模式提升到理论高度,并将之规范化。时至今日,在可复用面向对象软件的发展过程中,新的设计模式仍然不断出现,但很难找出能出其右的新理论了。
如果对设计模式还不是很清楚,那么请直接参考GOF经典之作《设计模式》,不过阅读此书需要注意,书中举得例子不是现在主流的语言,所用图示也不是标准UML。所以也可以阅读后来人们专门针对.net或者java编写的相关书籍。
3、 架构模式
架构一词,其实很泛,在这里,我仅指软件实现的框架,描述了一个软件的总体纲要或者基本结构。体现在程序中,指的是模块之间或者子系统之间的预先定义的职责关系,是一种粗粒度的对象处理,架构往往强调设计复用。比如常见的MVC、MVP、AOP、ORM、总线架构、微内核、元数据模式等整体架构或者局部架构。
关于架构模式,推荐书籍为《企业应用架构模式》,作者Martin Fowler是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。本书获得了2003年度美国软件开发杂志图书类的生产效率奖和读者选择奖。
4、 项目管理模式
项目管理模式指的是对项目组织实现过程中解决某种问题而采取的成功方法的总结。项目管理常见的模式如:敏捷开发、RUP、测试驱动开发等。项目管理模式也是众多模式中理解最容易却实现最难的模式,很多时候需要项目管理人员根据经验去选择合适的方法(模式)。
对此,推荐书籍如下:
一是《敏捷软件开发——原则、模式与实践》,此书是享誉全球的软件开发专家和软件工程大师Robert C . Martin向您介绍如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题,是第13届软件开发震撼大奖获奖作品。
二是《测试驱动开发》和《极限编程》。随着软件规模的不断扩大和软件复杂性的不断提高,传统的软件开发方法已逐渐不能适应当代软件开发的需要,Kent Beck长期致力于软件工程的理论研究和实践,这两本书介绍的正是在这种背景下提出的一些全新的软件开发方法(其实,极限编程应该是1996年就提出来并被Kent Beck应用在项目管理中,至今依然备受推崇)。
5、 反模式
怎么前边都是模式,最后又要反模式?其实,反模式也是模式,是指用来解决问题的带有共同性的不良方法,它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。说白了,反模式就是容易将事情搞砸的却经常犯的错误方法。
其实反模式涉及面也很广,包括了项目管理上的反模式,如:水中望月、软件膨胀等;设计中的反模式:上帝类、烟囱系统等,此外还有编码上的反模式、方法上的反模式等。
关于反模式的详细信息,具体参与《反模式:危机中软件、架构和项目的重构》,作者William J . Brown从一个新的角度审视模式,提出了反模式的概念,介绍了在软件开发中常常出现的问题,让读者可以迅速地检验身边的项目是否出现了这些状况,同时也针对每个反模式给出了相应的解决方案。