一、什么是软件开发模式
软件开发模式是个意义很广泛的感念。从技术方面来讲,软件开发模式是设计软件的基本思想和套路;从工程方面来讲,软件开发模式也是满足商业信息化和电子化的首选的手段和方法。通俗的讲,软件开发模式就是为开发出满足业务需要的软件而选择的一种实现方式。一般情况下,人们会参考公认的最佳实践并根据当前的具体情况,借助先进的辅助技术手段,形成符合项目所需的模式体系。

二、软件开发模式也在不断变化
软件开发模式与软件本身一样,是会随时间不断变化的。人们在创造出软件开发模式这个概念的时候,就已经预示着它并不是一成不变的了。原因是,软件开发模式是因软件而生的,是依附于软件的开发过程的。软件开发模式最初被创造出来的目的是,以不变的模式来应对多变的软件需求。可惜,事实证明,这是不可能的。当下,计算机软件技术在以每一到两年的周期翻新着。几乎每个月甚至每天,软件需要应对的问题都是不同的。需求的层出不穷和软件技术的推陈出新让软件开发者们应接不暇。于是,人们从以往的经验和问题求解过程中提取出了所谓模式的东西,使得在再遇到类似问题或情景的时候能够有可以参考甚至现成的最优解决方案。可惜,这种最优的解决方案是相对的。世界上也许存在着对一般问题的通解,但绝对不会存在针对所有类似问题的特解。更何况,在软件领域中,解决方案所依托的技术基础和思想原则本身就是在不断演化和变革。这也就意味着,软件开发模式也是需要随着时间的推移,随着软件技术的更新,不断的进行演化或者被完全淘汰。

三、软件开发模式的分类
那么软件开发模式多包括什么呢?人们从软件开发过程中总结出了固有模式,以求获得解决或者决策通用问题的通解。从开发阶段的不同来对软件开发模式进行划分是比较通用的一种方法。
在软件需求调研阶段,人们根据软件使用者的需求设计出软件的整体框架和总体技术要求,并在不断的改进中形成了针对某种系统需求或者软件体系结构的通用方案。这种方案在日后可能会成为软件产品的一部分,也可能被作为通用解决方案的基石。这种对软件整体进行设计的模式就叫做架构模式。
在软件设计阶段,人们开始用先进的软件设计思想(如面向对象设计思想)来定义软件各功能的名称、接口和交互方式。人们根据对以往经验的总结逐渐形成了所谓的最佳设计方法。依据这种设计方法,人们可以在处理类似问题的时候充分借鉴之前的思想和套路以获得公认的设计优势和好处,并可以根据具体需要进行演进和更新。这种通用的设计方式即为设计模式。
在软件实现阶段,开发人员经常会遇到与具体实现方式有关的大大小小的决策,比如:这个地方该用循环语句还是条件语句?我该把这些东西塞到一个类里吗?等等。每个人都会在开发过程中不断的自问并试图尽量快速的得到答案。那么,在实现中的很多方式都是非常通用的,是具有普遍意义的。人们把这些可以通用的实现方式叫做实现模式。在软件开发模式中,实现模式最为稳定,但同时它也是很重要的。

四、软件开发模式的用途
软件开发模式为了解决通用问题而生的,下面来说说主要的几个层次的软件开发模式都能够解决那些问题。
先说说实现模式。所谓实现模式,就是我们在编程过程中的一些习惯和较好的实现方式的总结。这种模式或多或少的会体现在团队的一些编码规范中。实现模式比较注重细节,它的核心思想是符合良好的编码习惯和较佳的实现规范。目的是使得团队中的代码风格开起来整齐划一。
更好的贯彻实现模式有五点好处:
1. 使得团队成员能够很容易的阅读另一位成员的代码,成员之间很容易进行交叉测试,Leader很容易review代码;
2. 在后期维护时会很容易领会原有代码的意图,并可以很容易的对原有代码加以修改和重构;
3. 可以让新进入的开发者尽快了解团队编码风格并迅速融入其中;
4. 可以使团队看上去更专业,而不是一群无组织无纪律的散兵。
5. 有了这么一套带有良好实现模式的编码规范,就可以是团队在最基本的技术层面上达成一致,可以大大地提高工作效率,避免了无谓的争论。
良好的或者趋向良好的团队都应该有自己的编码规范,在书写编码规范时应注意因地制宜的吸收一些参考资料中的公认条款,而且可以根据具体情况加入一些团队内部需要共享的原则。
下面来说说设计模式。希望提高自身技能的软件开发人员都会主动地去接触设计模式,因为那是许多前辈们总结出的软件设计的最佳实践参考。我相信真正的高级开发人员都至少读过一本关于设计模式的书。当然软件是多变的,设计模式也是如此。在真正理解和熟练运用设计模式之后,就可以根据自己的需要将原有模式进行演变,甚至创造出更好或更适合当时需要的模式来。设计是灵活的,设计模式只能作为实践参考。所以,我在这里不想过多地说怎样去用模式来设计软件。因为软件设计是业务需求的跟随者,是业务的技术级支持者。没有了业务依托的代码,最多也只能算是个demo程序而已。现在越多越多的软件和框架的目标都在向更好地实现特定业务转移。这是一个趋势,也是人们对软件设计的观念的进步。计算机是服务于人的,软件理所当然也是。所以在学习设计模式的时候并不需要恪守陈规,要学会为了目的而设计,而不是为了设计而设计。软件是有生命的,至少我坚信这一点。既然有生命就需要成长,从呱呱落地到成熟稳健是需要有一个过程的。所以,不要在一开始就试图去想象软件以前应该需要怎样的灵活性或者什么样的功能。因为在软件行当里,盲目的想象往往都不会成为现实。因而,与其费劲脑汁去过度设计,还不如集中精力优化现有的代码。然后再根据需求的变化而动,只作足够的,不做多余的。
架构模式是更高级的话题。现有主流架构思想和框架,思想路线都是一样的,即:把软件功能的粒度变小,以提高软件本身的灵活性,增加软件功能的可重用特性。最近流行的Web服务和面向服务架构模式都是为了更好的解决这方面问题而推出的。可见,软件的多变给软件开发者们带来了多大的麻烦,以至于不断会有新的、更好的架构体系和模式来试图解决这一问题。当然,同样随着时间的推移,就得架构模式渐渐显得力不从心,新的架构模式应运而生。这个过程同样体现在了从Web服务模式向面向服务架构模式的演化过程中。架构模式之所以不断的进行着自我演进或者更新换代,它的最终目的还是欲使软件的生命周期更长,更能适应将来的未知变化。虽然目标很难达到,但是主流架构模式的每次更新,都在向着目标大踏步前进。

五、写在最后
软件开发模式的内容有很多,可以做的工作也很多。另外,软件开发模式与软件项目管理与开发团队管理也有着千丝万缕的联系。综合运用、合理运用软件开发模式才能更好的为快速、得当的解决业务需要和软件问题带来福音。