【IT168 技术文章】
团队设计是敏捷方法论中很重要的一项实践。我们这里说的团队,指的并不是复数的人。一群人就是一群人,并没有办法构成团队。要想成为团队,有很多的工作要做。
我们之所以考虑以团队为单位来考虑架构设计,是因为软件开发本身就不是一件个人的事情,架构设计更是如此。单个人的思维不免有考虑欠妥之处,单个人的学识也不可能覆盖所有的学科。而组织有效的团队却能够弥补这些缺憾。
Context
谁来负责架构的设计?
Problem
在我们的印象中,总认为架构设计是那些所谓架构设计师的专属工作,他们往往拥有丰富的设计经验和相关的技能,他们不用编写代码,就能够设计出理论上尽善尽美的架构,配有精美的图例。
问题1:理论上设计近乎完美的架构缺乏程序的证明,在实际应用中往往会出这样那样的问题。
问题2:设计师设计架构带有很大的主观性,往往会忽视客户的需求,导致架构无法满足需求。
问题3:实现的程序员对这种架构有抵触的情绪,或是因为不理解架构而导致架构实现的失败。
问题4:架构师设计架构主要是依据自己的大量经验,设计出的架构不能真实的反映目前的软件需要。
Solution
团队设计的理论依据是群体决策。和个人决策相比,群体决策的最大好处就是其结论要更加的完整。而群体决策虽然有其优点,但其缺点也是很明显的:需要额外付出沟通成本、决策效率低、责任不明确、等等。但是群体决策如果能够组织得当的话,是能够在架构设计中发挥很大的优势的。
例1:在XP中,我们基本上看不到架构设计的影子。并不是说采用XP技术的团队就不需要架构设计。XP不存在专门的设计时期,它提倡使用一些简单的图例、比喻的方式来表达软件的架构,而这种的架构设计是无时无刻不在进行的。其实,XP中的设计采用的就是团队设计的方式,结队编程(Pair Programming)和代码的集体所有制(Collective Ownership)是团队设计的基础,也就是基于口述的沟通方式。通过采用这样的方式,XP几乎不需要文档来表达架构的设计。