Java应用架构读书笔记(6):实现复用

最大化的复用必然导致可用性的复杂化。模块可复用,必然要求模块具有灵活性,而灵活性会导致复杂性提高。 如何处理复用性和可用性之间的平衡是一个复杂的问题,而这个问题跟依赖有关。 我们在复用方面已经做了大量的工作。今天我们有大量的框架可供选择,比如Web框架,ORM框架,安全框架等。这些框架主要解决的是横向的问题,即主要关注基础设施和样例代码,但是对垂直的业务问题缺乏有效的解决方案。


模式3:Cohesive Modules

高内聚、低耦合是面向对象设计的一个原则。一个模块的内聚性是模块的功能强度的度量,指示一个模块内部各个元素彼此结合的紧密程度。 影响模块内聚性主要有以下两个关键因素: - 模块内类行为变化的速率 - 模块内的类同时被重用(即复用A的时候同时也会复用B)的可能性。一个模块的行为应该尽量只做一件事,而这个模块内部的行为在数据上和功能上应该有比较强的联系。


模式2:Module Reuse

模块复用:在模块层面上强调复用能力 面向对象编程范型为软件开发提供了一系列新的方法、原则和模式,其最重要的目的就是提高软件复用的程度。但是,随着软件系统规模的日益庞大以及越来越高的复杂度,强调类层面(class-level)上的复用的面向对象方法难免遇到了一些困境。 为了更有效的复用,就需要更高层次的复用单元——模块(module),在Java中就是JAR文件,代码被组织聚合在模块里并且可以被单独部署。


模式11:Default Implementation

缺省实现有助于平衡可用性和复用性。由于提供了缺省实现模块很容易被使用,同时又可以通过提供接口,在新的环境中以新的实现对其进行扩展。


模式10: External Configuration

外部配置可以让一个模块运行于不同的环境中。如下图所示,XML文件被Client类用来配置client.jar模块。可以注意到,负责初始化client.jar的配置信息与表示模块行为的Client类是分隔开的。 配置一个模块去它的适应运行环境有多种方法。配置文件可以放在模块里,也可以单独放在另一个模块,或者两种方法同时使用。第一种方法的优点是在默认环境使用时变得简单,缺点是默认配置很可能在其他环境不能使用。第二种方法的优点是模块不再与环境耦合,从而可以在不同环境重用,而缺点是每个新环境都需要重写配置文件,而且没有缺省的配置。