1、微软应用软件架构设计指南2.0Application Architecture Guide 2.0Designing Application on the .NET Platform王冠三博士微软总部研究院首席研究员任NISD部门首席架构师应用软件架构设计指南2.0 日程 指南导读 应用软件架构设计基础 微软.NET平台概述 Rich-Client Visual Studio 演示 网络应用软件的架构设计 移动应用软件的架构设计 案例:微软语音产品设计过程微软应用软件架构设计指南2.0 背景概述 2002版的“基于.NET的应用软件架构设计:设计应用软件和服务”(Application Arc
2、hitecture for .NET: Designing Application and Services) 基于原理的指南,整合最新实践和技术 微软内部的经验为主,外部专家和用户的积极参与 本人的参与: 语音API(SAPI)架构转型 W3C, ECMA, ISO 代表微软应用软件架构设计指南2.0 目的 主要对象:解决方案架构师和开发组长 更加有效地研发.NET平台上的应用软件 对其它平台上的软件开发也很有参考价值 提供设计层面的指南 注重最常见的应用类别 有助于架构师选择正确的架构设计方案,选择正确的技术,做出更有效的设计决策,遵循正确的模式(pattern)微软应用软件架构设计指南2
3、.0 指南的组织机构:围绕六个方面 典型的架构设计风格(arch styles) 应用类别(app types) 架构设计框架(arch frame) 质量属性(quality attributes) 原理,模式,实践(principles, patterns, practices) 技术与相关功能(tech & capabilities)微软应用软件架构设计指南2.0 主要特征(features) 应用软件的架构设计框架(framework) 模块化 整体化 专业知识 充分验证(微软内部测试评价+外部反馈 不断的局部演进:.Net Framework已到3.5版(4.0版Beta)微软应用软
4、件架构设计指南2.0 应用架构设计基础(fundamentals) 架构设计 设计一个结构的解决方案的过程,以满足技术和运行需求,同时以最佳的方法达到质量指标要求 涉及众多因素和相关人员 涉及一系列的决策 架构设计的定义 没有统一的定义:是工程,是科学,也是艺术 通常包含构件及其结构,构件之间的关系微软应用软件架构设计指南2.0 三种常见的定义(一)“Software architecture encompasses the set of significant decisions about the organization of a software system including:Se
5、lection of the structural elements and their interfaces by which the system is composed.Behavior as specified in collaboration among those elements.Composition of these structural and behavioral elements into larger subsystems.Architectural style that guides this organization.Software architecture a
6、lso involves functionality, usability, resilience, performance, reuse, comprehensibility, economic and technology constraints, tradeoffs and aesthetic concerns.”微软应用软件架构设计指南2.0 三种定义(二)The highest-level breakdown of a system into its parts.The decisions that are hard to change.There are multiple arch
7、itectures in a system.What is architecturally significant can change over a systems lifetime.In the end, architecture boils down to whatever the important stuff is.微软应用软件架构设计指南2.0 三种定义(三)“The software architecture of a program or computing system is the structure or structures of the system, which c
8、omprise software elements, the externally visible properties of those elements, and the relationships among them. Architecture is concerned with the public side of interfaces; private details of elementsdetails having to do solely with internal implementationare not architectural.”微软应用软件架构设计指南2.0 架构
9、设计的作用 提供一个坚实的“地基”(solid foundation) 提供开发工程师一个统一的系统设计思路和策略 重点在于构件和界面如何交互作用 降低产品的风险 考虑关键的使用“场景”(scenarios) 避免常见问题 考虑决定的长远影响微软应用软件架构设计指南2.0 架构设计的目标 通过对使用场景的深刻理解来建立业务需求和技术需求之间的“桥梁” 寻求最佳技术方案来实现业务需求 重点是识别对系统结构有重要影响的业务需求 降低技术方案业务风险 让系统具有足够的灵活性 解决质量指标要求之间的平衡 解决其他因素之间的冲突微软应用软件架构设计指南2.0 好的架构设计: 展现系统的结构但是隐藏实现的
10、细节 满足所有的使用需求 能解决系统相关人员(stakeholders)的各种顾虑 很好地实现功能需求,同时也满足质量指标的要求微软应用软件架构设计指南2.0 设计手段 以设计底线为参考 制定多个待选方案 测试评估,改进 几个要点: 所用假设是否正确 满足那些明显的和隐含的需求 存在的关键风险 对付风险的方案微软应用软件架构设计指南2.0 架构设计底线方法 应用类型 架构设计风格 功能元件的分析 部署策略 合适的技术 质量指标要求 全局因素微软应用软件架构设计指南2.0 设计的核心步骤 明确架构设计的目的(objectives) 找出关键场景(key scenarios) 概略分析开发的应用
11、(overview) 识别“敏感点” (hotspots) 制定候选方案 (candidate solutions)微软应用软件架构设计指南2.0 架构设计风格(styles) 基于构件的架构 (component-based) 信息通道架构(message-bus) 层次架构(layered-based) 3-tier/N-tier架构 面向对象架构(object-oriented, OOA) 名词取向 Noun centric 面向服务架构(service-oriented, SOA) 动词取向 Verb centric微软应用软件架构设计指南2.0 质量属性要求 可用性(availabi
12、lity) 概念完整性(conceptual integrity) 灵活性(flexibility) 互通性(interoperability) 可维护性 (maintainability) 可管理性(manageability) 性能(performance)微软应用软件架构设计指南2.0 质量属性要求(续) 可靠性(reliability) 再用性(reusability) 扩展性(scalability) 安全性(security) 可支持性(supportability) 可测试性(testability) 易用性(usability)微软应用软件架构设计指南2.0 架构设计的关键原则
13、 采用模型分析,降低风险 (UML) 采用模型和视图(views)进行交流 辨别什么决定影响核心工程 适应变化的设计而不是“永存”的设计 采用“递加渐进”的方法逐步完善设计 重全局思考而不要过多地在乎细节 不能忽视架构设计的有效评估微软应用软件架构设计指南2.0 .NET平台概述 由若干服务器应用,基础设施构件(infrastructure),实时服务,和.NET框架构成 应用基础设施 CLR .NET Framework 移动应用(mobile) .NET Compact Framework ASP.NET Mobile Silverlight Mobile微软应用软件架构设计指南2.0 .
14、NET平台支援的应用类型 Web应用 ASP.NET “强势”网络应用(Rich Internet App (RIA)) Silverlight “强势”客户端应用(Rich Client) Windows Forms Windows Presentation Foundation (WPF) 数据库(Database) Microsoft SQL Server微软应用软件架构设计指南2.0 .NET平台支援的应用类型(续) 服务(services) ASP.NET Web Services (ASMX) Windows Communication Foundation (WCF) 协同/工作
15、流(collaboration/workflow) Windows Workflow Foundation (WF) Office SharePoint (MOSS) BizTalk Server 网络服务器(Web Server) Internet Information Services (IIS) Visual Studio演示 微软应用软件架构设计指南2.0 例:.NET平台和层次式架构的应用微软应用软件架构设计指南2.0 .NET层次架构设计API 表现层(presentation layer) UI 构件 UI处理件 System.Web.UI System.Windows.For
16、m微软应用软件架构设计指南2.0 .NET层次架构设计API (续) 业务层(business layer) 应用表象(app faade):UI independent 业务工作流(business workflows) 业务构件 业务实体(business entities) System.Workflow System.Transactions System.ServiceModels微软应用软件架构设计指南2.0 .NET层次架构设计API(续) 数据层 数据存取 辅助功能(help utilities) 服务代理(service agents) System.Data System.
17、Data.Services微软应用软件架构设计指南2.0微软应用软件架构设计指南2.0 .NET层次架构设计API(续): 综合因素(cross-cutting) 安全性 运行管理 信息交流 System.Security, System.Messaging, System.Runtime System.Configuration, System.Deployment微软应用软件架构设计指南2.0 设计的核心原则 关注分离原则(separation of concerns) 功能单一原则(single responsibility) 最少相知原则(least knowledge) 不重复原则
18、(reusability) 逐步叠加原则 重合成,轻继承原则(composition over inheritance)微软应用软件架构设计指南2.0 设计面对的关键问题 认证和授权(authentication and authorization) 在信任边界之间缺乏认证 在信任边界之间缺乏授权 过细或不当授权 暂存(caching) 暂存易变的数据 暂存敏感数据 暂存方法不当微软应用软件架构设计指南2.0 设计面对的关键问题(续) 信息交流(communication) 传输协议选择不当 不必要的传输 对敏感数据保护不当 合成(composition) 太多的模块间的依赖 硬性依赖妨碍UI
19、的动态布局 硬性依赖妨碍模块的动态装载(dynamic loading)微软应用软件架构设计指南2.0 设计面对的关键问题(续) 并发和事务处理(concurrency and transactions) 对静态数据的并发存取不作保护 不当“锁定”导致“死锁” 没有选择正确的数据并发模型 运行时间长的事务处理“锁定”数据 不必要地使用“排他锁定”微软应用软件架构设计指南2.0 设计面对的关键问题(续) 配置管理 (configuration management) 缺乏配置信息 对敏感配置信息保护不当 对配置信息的存取不作必要的保护 耦合和凝聚(coupling and cohesion) 功
20、能组合不当 关注分离不明确 层次之间的紧密耦合微软应用软件架构设计指南2.0 设计面对的关键问题(续) 数据存取(data access) 不必要的认证和授权细分 过于频繁的数据库调用 混淆业务逻辑与数据存取代码 例外管理(exception management) “例外”发生时向用户透露敏感信息 使用“例外”去控制程序的运行 没有记录“例外”发生详细信息微软应用软件架构设计指南2.0 设计面对的关键问题(续) 分层(layering) 构件误置 不遵循分层和独立规则 没有考虑层次的物理配置问题 状态管理(state management) 不正确的状态存储方式 没有考虑序列化要求(seri
21、alization requirements) 在需要时不“硬存”状态(persisting)微软应用软件架构设计指南2.0 设计面对的关键问题(续) 结构(structure) 与使用场景不吻合的结构 过于复杂的结构 没有考虑部署局面(deployment scenarios) 用户体验(user experience) 不遵循通用的惯例 没有考虑“易接触”(accessibility) 叠加不相关的功能,从而导致界面拥挤微软应用软件架构设计指南2.0 设计面对的关键问题(续) 验证(validation) 越过信任边界时不进行验证 不验证值域,类型,格式,和长度 不使用现有的验证逻辑 工作
22、流(workflow) 没有考虑管理需求 选用不当的模式 (pattern) 没有考虑“例外”状态以及相应的对策微软应用软件架构设计指南2.0常见网络应用的部署设计模式(Design Patterns)微软应用软件架构设计指南2.0 部署模式 非分布式微软应用软件架构设计指南2.0 部署模式 分布式微软应用软件架构设计指南2.0典型的网络应用安全架构微软应用软件架构设计指南2.0 部署模式:信任子系统微软应用软件架构设计指南2.0 部署模式:多个信任服务模型微软应用软件架构设计指南2.0 部署模式:Web Farm微软应用软件架构设计指南2.0 部署模式:装载平衡集群微软应用软件架构设计指南2
23、.0 部署模式:Failover微软应用软件架构设计指南2.0移动应用的架构设计微软应用软件架构设计指南2.0 移动应用架构设计 多层次应用 用户体验(UI)层 业务层 数据层 用户端类型 强功能用户端 业务层,数据层在终端上 弱功能用户端 业务层,数据层在服务器上微软应用软件架构设计指南2.0 设计考量 用户端类型 终端特征(屏幕尺寸,分辨率,CPU,) 连接特点,带宽 恰当的UI 层次结构的分布 终端的资源限制(电池,内存,CPU功能)微软应用软件架构设计指南2.0 技术考量 .NET Compact Framework .NET框架类库子集 只支持Visual Basic 和Visual
24、 C# 老程序移植问题较多 Windows Mobile 注意版本之间的差异(专业/普通) 采用不同的安全模型,程序不完全通用 仅使用Windows Mobile API读存内存和文件微软应用软件架构设计指南2.0 技术考量(续) Silverlight for Mobile 还处于开发阶段 支持多媒体和交互性 移动终端与桌面应用的一致性 尽量使用ASP.NET/HTML,避免ASP.NET for Mobile Windows Embedded 适用于机顶盒,POS机,ATM,支持GPS等终端设备 不同的设备类兴许采用不同的版本 采用共同程序基库时必须考虑版本间的不一致微软应用软件架构设计指南2.0 核心问题 认证和授权 暂存(caching) 通讯 配置管理(configuration) 数据存取 终端设备特点 意外事件管理(exception)微软应用软件架构设计指南2.0 核心问题(续) 信息记录(logging) 移植(porting) 同步(synchronization) 电源 UI 性能 测试 部署(deployment)