快速业务通道

演化架构和紧急设计: 演化架构 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

演化架构和紧急设计: 演化架构

时间:2011-08-18 IBM Neal Ford

简介: 这一期的 演化架构和紧急设计 将会解决演化架构相关的各种主题,包括设计和架构之间的重 要区别(以及如何区分两者),您在创建企业级架构时遇到的某些问题,以及面向服务的架构中静态类型 和动态类型的区别。

在 本系列的第一期 中,我推荐了软件世界中的一些架构定义。无论如何,如果您已经阅读过本系列 ,您会注意到我花费了大部分时间在设计上。我之所以这么做是基于以下几个原因:首先,在当前紧急设 计尚未被广泛关注时,软件世界里存在很多架构定义(良莠不齐);其次,在设计方面很多问题都有具体 的、不受环境限制的解决方案。架构往往还涉及到很多组织内的物理和逻辑基础设施,使其难以独立谈起 。

关于本系列

本 系列 旨在从全新的视角来介绍经常讨论但是又难以理解的软件架构和设计概念。通过具体示例, Neal Ford 将帮助您在演化架构 和紧急设计 的灵活实践中打下坚实的基础。通过将重要的架构和设计决 定推迟到最后责任时刻,您可以防止不必要的复杂度降低软件项目的质量。

这一期填补了敏捷构架材料缺失的空白。在此我讨论的是如何分辨架构和设计,涵盖了一些广泛的架 构考虑,然后通过讨论版本控制端点,浅谈敏捷的面向服务架构(SOA)。

分辨架构和设计

Martin Fowler 对架构的定义(来自和他的对话中)是我认为最好的:

架构就是完成之后很难更改的东西。所以这种东西应该尽可能越少越好。

您可以想象一下架构和设计之间的交互,如图 1 中所示的关系:

图 1. 架构和设计的关系

演化架构和紧急设计: 演化架构(2)

时间:2011-08-18 IBM Neal Ford

一个软件系统的架构形成是所有其他部分存在的基础,如 图 1 中的灰盒所示。设计部分存在于架构 之上,如红盒所示。处于更基础的地位,架构部分难以移动和替换是因为您不得不移动所有以架构为基础 的部分来适应改变。这一定义使识别设计和架构更为简单。例如,您所使用的 Web 框架就是一个架构, 因为它难以替换。尽管,在那个 Web 框架中您使用不同的设计模式来表述特定的目标,这就表示大部分 的正式设计模式是设计,而不是架构的一部分。

Fowler 所定义的架构的推论是:您应该灵活地构造架构部分,以便能够更轻松地替换它们(如果真的 需要的话)。但是如何才能确保这点呢?这里有个例子。

许多框架都会试图诱导您使用其自身的类,而不是 JDK 或者一个开放标准机构(例如 OASIS)提供的 更普遍的类。这就是耦合的 “毒贩模式”:如果您服从这些诱导,您就只能永远受制于框架。这些框架 采取的普遍方法就是,如果您使用了它们的类,某方面就会变得异常简单。这方面的完美例子就来自于 Apache Struts Web 框架。

在您的应用程序中包含业务规则和其他非基础设施代码的类是域类:它们包含着您的问题领域相关的 有趣信息。Sturts 中的一个好助手类就是 ActionForm 类。如果您从 ActionForm 继承了您的域对象, 您的应用程序就会变得更方便。您可以从参数完成自动表格填充、自动验证(Web 和服务器层),以及其 他便利。您所要做的就只是把 Struts ActionForm 类作为子集,如图 2 所示:

图 2. 使用 Struts ActionForm 类

在 图 2 中,标签为 Model 的盒子包含了您的域对象。它扩展了 Struts 的 ActionForm,使得这一 结构此后难以改变。如果以后您决定 ScheduleItem 也需要在一个 Swing 应用程序中运行,那就很难办 了。您只剩下两个难以接受的解决方案:将所有的 Struts 拖拽到 Swing 应用程序中(且不使用它)或 者摆脱对 Struts 的依赖。

较好的替代方案就是采用组合而不是继承,如图 3 所示:

图 3. 通过组合来对您的域类解耦合

在此版本中,域类(黄色

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号