1.1.3 架构设计的优点
总的来说,架构设计是降低成本、改进质量、支持按计划及时交付、支持按需求交付及降低风险的一个关键因素。下面集中介绍了架构设计如何帮助项目达成这些目标。
另外,因为架构师有时候必须证明架构设计的存在是合理的,所以本节也会提供一些有用的资料来证明架构设计是软件开发流程中的一个重要组成部分。
1. 架构设计解决系统的质量问题
系统的功能是通过组成架构的各种元素之间发生的交互来实现的。系统质量是通过架构达成的。在缺少统一的架构设计的情况下,性能、安全及可维护性等质量是不可能保证的,这些质量不仅限于单个架构元素,而是遍布于整个架构。例如,为了处理性能的需求,必须考虑架构中每个组件执行的时间及组件之间通信所花的时间。同样,为了处理安全的需求,必须考虑组件之间的通信类型,而且要在必要的地方引入专门的具有安全意识的组件。所有这些考虑都是关于架构的,而且,在这些例子中还涉及组件本身以及它们之间的联系。
架构设计的一个优点是使在项目生命周期的早期评估这类质量成为可能。通过一个真实的实现(在这种情况下采用架构概念模型)来证明达到了这类质量要求,这一点非常重要,因为一个架构无论在纸上看起来有多么优秀,都需要通过可执行软件来证明。
2. 架构设计促进达成共识
架构设计流程促进不同的利益相关者达成共识,因为它提供了一个工具让大家能够对系统解决方案进行辩论。一个可以被进行有效交流的架构让大家对决策和折中进行辩论,使检查变得容易,还使得大家达成一致。相反,一个缺乏交流的架构不会使这样的辩论发生。没有这样的输入,最终的架构可能是低质量的。
适当地编写文档是对一个架构进行有效交流的一个重要方面。需要注意的是,架构可以作为培训的一部分,促进架构师(及他们的设想)和新的或现有的团队成员之间达成共识。为了取得这个好处,设计出来的架构还必须在团队中进行有效的交讨论与传递让开发团队清楚知道他们正在实现的内容的,从而更有可能按期望实现产品。
通过验证架构是否符合规定的需求也可以促进达成共识。正如前一部分提到的,创建可执行概念模型是证明一个架构达到一定运行期质量的一个极好方式。
3. 架构设计支持计划流程的编制
架构设计为项目的很多方面提供支持与依据,例如它支持详细设计和代码实现的,因为架构设计是是这些活动的直接输入。
然而,架构设计流程主要的好处是为项目计划编制和项目管理活动(一般指时间安排、工作分配、成本分析、风险管理及技能发展)提供相关的支持。同时,这也是架构师和项目经理应该保持紧密关系的主要理由之一。
为了便于讨论,我们考虑一个简单的情形,如图1-3 所示。
其中,每个组件总是完全实现的(就是说,我们会实现每个元素全部功能)。
从实现的角度来看,上面的组件之间的依赖关系告诉我们:“错误日志”组件应该在一开始就必须实现,因为其他组件都使用了这个组件。“消费者管理”及“执行”组件可以并行实现,因为它们彼此并不依赖。当这两个组件实现时,就可以实现“账号管理”组件了。
根据这些信息,就可以得到如图1-4所示的一张甘特图(项目经理使用的计划编制的常规技术之一)。虽然每项任务所需的确定时间需要仔细考虑,但是,已经可以根据每个架构元素的复杂度大致进行推断了。
与一个项目相关的成本来自许多方面,架构师也能在项目的成本评估中提供帮助,比如任务的周期和分配给任务的资源可以确定劳动力的成本。
架构还可以帮助确定交付系统中使用的第三方组件相关成本,以及支持创建架构元素所需使用的特定工具的成本。
最后,架构确定可以在项目需要的技能方面提供输入的解决方案。如果在项目内或组织内没有适当技能的资源可用,架构可以清晰地帮助识别技能需求点。这种需求可以通过发展现有的人员、外包或雇用新人员来得到满足。
4. 架构设计促进架构的完整性
架构设计流程的主要目标之一是确保这种架构能为设计人员和实现人员所做的工作提供一个稳固的框架。这个目标并不是简单地传播一个架构设想。为了确保最终架构的完整性,架构师必须清楚地定义架构本身,确定架构上的重要元素,比如系统的组件、它们的接口,以及它们相互之间的交互。
架构设计的另一个目标是消除设计人员及实现人员不必要的创造力,可通过对设计人员和实现人员能做的工作进行约束来实现这个目标,如果违反这些约束会导致架构遭到损坏。
5. 架构设计有助于管理复杂性
现今的系统比以往更加复杂,所以我们必须对这个复杂性进行管理。就像前面提到的,因为一个架构只关注重要的元素,它提供了系统的一个抽象概念,从而为管理复杂性提供了一个方法。此外,架构设计流程还考虑了组件的递归分解,这明显是碰到一个大问题后把它分解成一系列较小问题的好办法。
6. 架构设计为重用提供基础
架构设计流程既可以支持生产,也可以支持资源的可重用(例如,组件、文档和经验)。可重用资源对组织有益,因为它们可以降低一个系统的总成本,也可以提高系统的质量,当然,前提是可重用资源是已经被证实了的。
架构设计也使得有机会对可重用的资源进行识别。在资源生产方面,架构可能包含一些在当前系统之外也可以使用的元素。一个架构可能包含一个在其他背景中也能使用的错误日志机制。
7. 架构设计降低维护成本
架构设计流程能够在多方面帮助降低维护成本。
首先,架构设计流程应该始终确保系统维护人员是一个关键利益相关者,维护人员的需求会作为主要关注点进行处理,而不是事后考虑。
架构设计的结果应该是形成一个适当的文档,并且使得系统的维护变得很容易的架构;架构师也要确保系统维护机制的一致性,并在创建架构时考虑系统的适应性及可扩展性。
另外,架构师还要考虑维护系统所需要的技能,这些技能可能会与创建这个系统的团队成员的技能不同。架构师应该考虑系统最可能发生改变的区域并隔离它们。如果改变只影响单个组件或少量的组件,那这个流程会相当简单。然而,有一些改变不能按这种方式隔离,例如与系统质量相关的改变(如性能或可靠性)。也正是因为这个原因,架构师在设计当前系统的架构时必须考虑将来任何可能的需求。例如,把一个最初设计成支持几十个用户的系统放大成支持数千个用户的系统,若不从根本上改变架构的话这几乎是不可能的。
可维护性问题仅仅是那些会随着时间变化而逐渐发展的系统所主要关注的问题,并不针对那些打算提供小规模解决方案且生命周期短暂的系统。
8. 架构设计支持影响分析
架构设计的一个重要优点是使架构师能够在进行调整之前推论出该调整将会产生的影响。架构设计可以确认出主要的组件、它们的交互、组件之间的依赖,以及组件到它们实现的需求之间的可追溯性。
根据这些信息,一个需求的改变对协作实现这个需求的组件所产生的影响都可以分析出来。同样,改变一个组件对于依赖它的其他组件所造成的影响也可以分析出来。这样的分析非常有助于确定一个改变的成本、改变对系统的影响及其带来的风险。