使用应用框架有五大优点:模块化(modularity)、可重用性(reusability)、可扩展性(extensibility)、简单性(simplicity)和可维护性(maintainability)。
1.3.1 模块化
模块化就是把应用分割成多个组件或模块。这样,开发者就可以采用各模块互不影响的方式使用应用框架——希望使用应用框架某个组件的开发者,不会受到框架其他组件潜在变化的影响。当开发者基于框架之上构建应用时,他们的开发活动会更好地被隔离开,而不受应用框架其他部分变化的影响;从而,开发效率显著提高了。把框架划分成模块,我们就可以指派擅长该部分的开发者来完成它,从而使生产效率最大化。以开发Web应用为例,模块化带来如下好处:指派熟悉表现层的用户界面开发者负责应用的前端(front-end),开发效率会更高;而指派熟悉业务逻辑层的开发者负责应用的中间层(middle tier)和后端(back-end),开发效率也会更高。同样,对使用应用框架来说,有的开发者擅长使用框架的用户界面相关模块,而有的开发者擅长使用框架的业务对象。
1.3.2 可重用性
代码的可重用性是应用开发中最重要和最令人期待的目标。应用框架能为基于其上构建的应用提供这种可重用性;而且,不仅应用框架的类和代码被重用了,其设计也被重用了。不同的应用通常会包含很多本质上相似的任务,然而,团队中的不同开发者往往都会自己实现一遍。这种重复实现,不仅在重复的代码上不必要地浪费了资源,也为以后的维护带来了困难。这是因为,要保证修改得彻底,必须对应用的多处进行重复修改。另外,由于每个开发者的设计方法可能不尽相同,这就可能使应用的设计变得很糟糕,为以后带来不可预料的问题。然而,有了应用框架,我们能将大量重复代码和通用解决方案从应用层移到框架层。这样一来,开发者编写和维护的重复代码的数量减少了,开发效率也大幅提高了。应用框架是精心设计的组件的汇集之处,其中不乏“久经考验”的优秀的软件设计方案。开发者并不一定是软件设计专家,但是一旦开始使用框架组件来构建应用,他们就自然而然地在重用优秀的软件设计方法了,比如藏在框架组件背后的设计模式等等。
1.3.3 可扩展性
可扩展性是往现有的框架中增加自定义功能的能力,它使开发者不仅能够“即拆即用(out of the box)”地使用框架组件,还能够改变组件,以适应特定业务场景(business scenario)的需要。可扩展性是框架的重要特征。每一个业务应用都有独一无二的业务需求、架构(architecture)和实现。虽然框架本身容纳所有这些具体情况是不可能的,但是,框架采取了支持客户化(customization)的设计思路;这样,不同的业务应用依然能够使用框架的通用功能,同时,开发者通过在框架中插入自定义的业务逻辑,可以自由地按照独一无二的业务需求剪裁他们的应用。框架本身有了很高的可扩展性,就能适应更多类型的业务应用。然而,在创建框架时,其可扩展性总应根据它将支持的应用的设想和上下文来决定。框架的可扩展性越高,使用框架的开发者需要编写的代码就越多,他们需要了解的框架机制细节也越多,这样就会降低开发效率。一个高度可扩展框架的极端例子是Microsoft .NET框架,它所支持的应用范围非常广泛。的确,使用.NET框架开发应用几乎没有限制,但结果,你也失去了应用框架能够提供的好处。关键在于,找出你要开发的特定应用中最可能发生变化之处,在那里增加灵活性(flexibility)和可扩展性支持。
1.3.4 简单性
术语“简单性(simplicity)”的含义不仅仅是“简单”。简单性指的是一种方法:框架通过封装处理流程的控制逻辑,使它对开发者透明,来简化开发工作。这种封装也是框架和类库(class library)的区别之一。类库由许多现成的、供开发者用于构建应用的组件组成,但是,开发者必须理解不同组件之间的关系,并编写处理流程代码把众多组件组织起来。框架则不同,它通过预先把众多组件组织在一起的方式,封装了处理流程的控制逻辑;因此,开发者就不用再编写控制逻辑来组织组件之间的交互了。图1-2说明了类库和框架的这种区别。

图1-2 类库和应用框架的比较
由图可知,应用开发者使用类库这种方法时,必须编写管理类库中不同组件实例(instance)的控制流程。为此,应用开发者必须充分理解每个相关组件,以及组织组件协作所必需的业务逻辑。而使用框架这种方法时,由于大部分处理流程已经被框架管理了起来,所以开发者需要编写的控制代码就非常少。由于应用框架隐藏了不同组件之间的处理流程,这就免去了开发者编写协调逻辑(coordination logic)之苦,也不用经历编写这些协调代码的学习曲线了。既然处理流程的控制逻辑从应用层移到了应用框架层,那么框架的设计人员就要运用其架构和领域知识,来定义框架内的组件该如何协作;而使用框架的开发者,几乎无须知道框架组件如何协作,就能高效地开发应用。1.3.5 可维护性
可维护性是业务需求改变之后,其应用便于修改的能力。它是代码重用带来的一个受欢迎的效用。框架组件通常会被多个应用或单个应用中的不同部分共享。只保留一份框架代码库(code base)使得应用易于维护,因为当需求改变时,你只须改变一次。应用框架也可能包含多个层(layer),每一层关于应用要支持的业务都有某些假设(assumption)。其中,最底层包含了没有任何业务假设的框架组件,它们是框架中最通用的组件;层次越往上,其组件依赖的业务假设(business assumption)越多,因此也对业务需求和业务规则的变化越敏感。每当变化发生时,只有那些业务假设被打破的层中的组件需要被修改和测试。因此,让框架的不同层包含不同级别的业务知识,能够减少因改变业务需求和业务规则所带来的连锁反应。这也使得维护成本降低,因为只须维护因业务规则改变所影响到的代码。更多有关框架分层的知识,我们将在第2章讨论。





