必须从正常工作的简单系统开始
最佳解决方案是那些由一组更小的、简单的、能够可靠且有效地解决简单问题的机制组成的解决方案。在构建更大、更复杂的系统过程中,将这些简单的机制组合在一起,从而形成更大的系统。
模式对于开发人员和体系结构设计者非常有用,因为它们:
• 记录能够正常工作的简单机制。
• 为开发人员和体系结构设计者提供通用的词汇和分类法。
• 允许以模式组合的方式简明扼要地描述方案。
• 允许重复使用体系结构、设计和实现决策。
模式描述给定上下文中反复出现的问题,并基于一组指导性影响因素来建议解决方案。解决方案通常是一种简单的机制,是为了解决模式中所标示出的问题而一起工作的两个或多个类、对象、服务、进程、线程、组件或节点之间的协作。
Singleton 模式 (问题-解决方案对模式):
反复出现的问题并寻求解决方案的模式,问题-解决方案。
模式级别的解决方案是多个类之间简单但极其顺畅的协作。可以稍微修改一下某种模式以满足局部的特定要求,所以同一种模式可以应用于无数个应用程序。
所编写的模式提供了一种记录简单且经过证实的机制的有效方法。模式是以特定格式编写的,这一点对于装载复杂思想的容器非常有用。这些模式在被记载和起名之前,就早已存在于开发人员的大脑及其代码中。有时,模式作者从实际的实现中发现了这些模式,并对它们进行推广,以便应用于其他应用程序。
虽然模式作者通常在这些通用模式中提供了实现代码示例,但是一定要了解实现这些模式还有许多其他正确的方法。其中的关键在于了解模式中的指导原则,并根据自己的具体情形自定义它。
Layers 模式 (层模式)
该模式存在于多个不同的抽象级别中。每层包含大致位于同一抽象级别的元素。随后,确定每一层中的依赖性,并确定采用严格还是宽松的分层策略。接着,决定是打算创建自定义的分层方案,还是采用以前由其他人记录的分层方案。
如果在构建应用程序时没有一个考虑周全的依存关系管理策略,会导致组件易损坏且不牢靠,从而导致对它们进行维护、扩展和替代时存在较大的困难,而且成本较高。
Layers 模式中的工作机制比 Singleton 中的工作机制更精细。对于 Layers,首次协作是在设计时发生在类之间,这是由于分层组织将对更改源代码所带来的影响局部化,从而防止所做的更改贯穿到整个系统。第二次协作发生在运行时:某层中相对独立的组件变得可与其他组件交换,再一次使系统其余部分不受影响。
尽管 Layers 模式的通用性足以应用于诸如网络协议、平台软件和虚拟机之类的领域,但是它无法解决企业类业务解决方案中存在的某些特定问题。例如,除通过分解来管理复杂性(由 Layers 解决的基本问题)外,业务解决方案开发人员还需要进行适当组织,以便有效地重复使用业务逻辑并保留与昂贵资源(如数据库)的重要连接。解决此问题的方法之一就是使用 Three-Layered Application(三层应用程序)模式。
Three-Layered Application 实际上是在 Layers 的基础上进行的简单优化;在 Layers 中确定的上下文、影响因素和解决方案仍适用于 Three-Layered Application,但反之不行。也就是说,Layers 模式约束着 Three-Layered Application 模式,而 Three-Layered Application 模式优化了 Layers 模式。这种模式关系对于复杂性管理非常有用。当您理解某种模式之后,肯定只是了解了初始模式与其优化模式之间的递增区别。
Layers 引进了一个用来组织软件应用程序的基本策略。Three-Layered Application 优化了此概念,并将它限制在需要重复使用业务逻辑、灵活部署和高效使用连接的业务系统的范围内。Three-Layered Services Application 又在 Three-Layered Application 的基础上进行了优化,并对设计进行了扩展,以便在提供和使用其来源千差万别的数据和逻辑时,将这些数据和逻辑处理为粒状元素。

向特定层中添加其他类型的组件并不是管理这种日益增长的复杂性的唯一方法。正如复杂性所证实的那样,设计人员通常在应用程序中创建其他层来承担该职责。例如,一些设计人员将服务接口移到一个单独的层中。而另外一些设计人员将业务层分隔成域层和应用程序层。在任何情况下,您有时可能会看到某些设计人员在使用此模式来满足复杂要求时,有时会将这三层扩展到四层、五层或者甚至六层。与之相反,Layers 模式也用在相对简单的客户端-服务器应用程序中(标准情况是两层应用程序)。
当组合在一起时,Layers 的这些变体组成了模式群集,该模式群集直观地表示出了应用程序分层的常见方法。此上下文中涉及的群集仅表示以逻辑方式组合某组相似的模式。群集的概念对于下列操作非常有用:扩展模式视图以包含整个解决方案;标识出处理解决方案范围内类似问题的模式群集。