微软最近在“模式及实践”分类下发布了一篇文档,名为“如何用敏捷架构进行设计”,为如何使用敏捷方式进行架构提供了详细的指导。
文档推荐用以下列举的条目做为输入,开始设计之路:
- 用例和使用场景
- 功能需求
- 非功能需求(质量相关话题,如性能、安全性、可靠性)
- 技术需求
- 目标部署环境
- 限制
设计应该产生这些输出产物:
- 架构特征明显的用例
- 架构热点
- 候选架构
- 架构刺探
该文档通过明确建议不要一步完成架构设计,而要采取五步法实现的方式引入敏捷:
- 第一步:确认架构目标。清晰的目标可以帮助你致力于自己的架构,还能帮助你致力于解决设计中合适的问题。好的目标帮助你决定什么时候完工,以及什么时候需要开始下一个新的阶段;
- 第二步:关键场景。使用关键场景让设计只关注最经常发生的事情,以及在候选架构准备好时对它们进行评估;
- 第三步:应用概览。理解你的应用类型、部署架构、架构类型以及技术等,以将设计和应用要服务的真实世界密切联系起来;
- 第四步:关键热点。根据质量特征和架构框架确认关键热点。在设计应用时,总有一些地方是经常犯错的。
- 第五步:候选方案。创建一个候选架构或者“架构刺探(Architectural Spike”,然后用关键场景、热点和部署限制等对它进行评估。
第一步:确认架构目标
根据微软模式与实践部门首席程序经理 J.D. Meier 所说,这一步的目的是评估“在接下来的几步上要花费多少时间、精力以及全部努力等”。第一步的结果应该是:
- 构建原型
- 确定关键技术风险
- 测试潜在路径
- 共享模型和约定
第二步:关键场景
根据 J.D. Meier 的说法,可基于下面这些用例的要素,确定什么是最好的场景:
- 对于所部署应用的成功和接受度来说,它们是重要的;
- 用例中充分体现了设计,可资用于评估架构。
第三步:应用概览
要将真实世界的细节和具体事物引入到设计中,应用概览是必不可少的,我们可以通过以下几步来创建它:
- 决定应用类型:首先,要决定你要构建的应用是什么类型。是移动应用,富客户端,富互联网应用,服务,Web 应用还是其他组合等?
- 理解部署约束:下面,要理解你的目标部署环境,然后决定它会对你的架构产生什么影响。
- 确定重要的架构类型:决定在你的设计中要使用哪种架构类型。你会构建一个面向服务的架构,C/S,分层的,消息总线还是其他组合等?
- 决定相关的技术:最后,根据你的应用类型和其他约束来确定相关技术选型,并决定在架构中你要利用哪个技术。
对于以上提到的所有步骤,文档都提供了建议,下面提供了一个在多个架构类型中做选型的例子:
- C/S:对系统进行隔离,这样客户端可以从服务器发出请求;
- 基于组件:将应用设计分解成可复用且接口定义良好的组件;
- 分层:将系统以分层的形式隔离成功能类似的集合;
- 消息总线:定义能被所有连接系统使用的已知格式,从而使得它们不需要了解真实接收端之间的区别;
- 面向对象:一种基于将任务分成可复用对象的编程类型,这些对象包含数据以及和对象相关的动作;
- 面向服务(SOA):一种使用契约和消息以服务的形式暴露和消费功能的应用。
第四步:关键热点
在这一步,我们应该“确定应用架构中的热点,来理解那些经常犯错的地方。关键热点则可以通过质量特征和横切关注点来组织起来。”文档中提到的众多热点包括:可用性、交互性、可维护性、可靠性、安全等。
第五步:候选方案
确定好关键热点后,架构的初步草案就已经形成了。然后,要回到第二步来评估候选架构,然后根据第三、第四、第五步产生一个新的候选。这个过程迭代重复,通过每个迭代对自己进行优化。
评论