原书名: Microsoft Application Architecture Guide
原出版社: Microsoft Press
作者: patterns & practices 团队
译者: 朱晔 高翔 王敏
出版社:电子工业出版社
ISBN:9787121120473
上架时间:2010-11-19
出版日期:2010 年11月
开本:16开
页码:382
版次:2-1
所属分类: 计算机
原书名: Microsoft Application Architecture Guide
原出版社: Microsoft Press
作者: patterns & practices 团队
译者: 朱晔 高翔 王敏
出版社:电子工业出版社
ISBN:9787121120473
上架时间:2010-11-19
出版日期:2010 年11月
开本:16开
页码:382
版次:2-1
所属分类: 计算机
本书为架构师和开发人员提供有关基于微软平台和.NET框架进行应用程序架构设计的一些指导。本书分为四个部分:第一部分“软件架构和设计篇”提供了对底层原则和模式的总结,第二部分“设计基础篇”提供了有关设计解决方案分层、组件及服务的指导原则,以及处理有关质量特性和横切关注点的一些指导原则,第三部分“应用原型篇”提供了针对典型应用程序类型的一些特定指导原则,最后,附录提供了微软平台和.NET框架技术及其特性的概览。
序一 i
序二 ii
前言 iii
导言 iv
软件架构和设计篇 1
第1章 什么是软件架构 3
1.1 为什么架构很重要? 3
1.2 架构的目标 4
1.2.1 架构风景线(architectural landscape) 5
1.3 架构设计的原则 5
1.3.1 关键设计原则 6
1.3.2 其他资源 6
第2章 软件架构的关键原则 7
2.1 概览 7
2.2 关键设计原则 8
2.3 关键设计考量 10
2.3.1 确定应用程序类型 10
2.3.2 确定部署策略 11
2.3.3 确定合适的技术 11
2.3.4 确定质量特性 11
.2.3.5 确定横切关注点 11
第3章 架构模式和风格 13
3.1 概览 13
3.2 什么是架构风格? 13
3.3 关键架构风格小结 14
3.3.1 组合架构风格 14
3.4 客户端/服务端架构风格 15
3.5 基于组件的架构风格 16
3.6 领域驱动设计架构风格 17
3.7 分层架构风格 18
3.8 消息总线架构风格 20
3.9 n层/三层架构风格 21
3.10 面向对象架构风格 21
3.11 面向服务架构风格 22
3.12 其他资源 23
第4章 架构和设计的方法 25
4.1 概览 25
4.2 输入、输出和设计步骤 25
4.3 确定架构目标 26
4.3.1 范围和时间 26
4.4 关键应用场景 27
4.4.1 对架构重要的用例 27
4.5 应用程序概览 28
4.5.1 相关技术 29
4.5.2 画出您的架构 29
4.6 关键问题 30
4.6.1 质量特性 30
4.6.2 横切关注点 30
4.6.3 用于减少问题的设计 31
4.7 候选解决方案 32
4.7.1 基准架构和候选架构 32
4.7.2 架构刺探 33
4.8 接下去做什么 33
4.9 评审架构 33
4.9.1 基于应用场景的评估 33
4.10 展示和沟通您的架构设计 34
4.11 其他资源 35
设计基础篇 37
第5章 分层应用程序指导原则 39
5.1 概览 39
5.2 逻辑分层设计 39
5.2.1 表现层、业务层和数据层 39
5.3 服务和分层 40
5.3.1 服务层 41
5.4 分层结构的设计步骤 42
步骤1:选择您的分层策略 42
步骤2:确定您需要的分层 43
步骤3:确定如何分布层和组件 43
步骤4:确定是否需要收缩层 43
步骤5:确定层之间交互的规则 44
步骤6:找出横切关注点 44
步骤7:定义层之间的接口 44
步骤8:选择您的部署策略 45
步骤9:选择通信协议 46
第6章 表现层指导原则 47
6.1 概览 47
6.2 总体设计考量 48
6.3 特定设计问题 49
6.3.1 缓存 49
6.3.2 通信 50
6.3.3 组合 50
6.3.4 异常管理 50
6.3.5 导航 51
6.3.6 用户体验 51
6.3.7 用户界面 52
6.3.8 验证 52
6.4 技术考量 53
6.4.1 移动应用程序 53
6.4.2 富客户端应用程序 53
6.4.3 富互联网应用程序 53
6.4.4 web应用程序 54
6.5 性能考量 54
6.6 表现层设计步骤 55
6.7 相关设计模式 56
6.8 模式和实践团队提供的产品 57
6.9 其他资源 57
第7章 业务层指导原则 59
7.1 概览 59
7.2 总体设计考量 60
7.3 特定设计问题 61
7.3.1 身份验证 61
7.3.2 授权 61
7.3.3 缓存 62
7.3.4 耦合和内聚 62
7.3.5 异常管理 63
7.3.6 日志、审核和指示器(instrumentation) 63
7.3.7 验证 63
7.4 部署考量 64
7.5 业务层的设计步骤 64
7.6 相关设计模式 65
7.7 模式和实践小组提供的产品 65
7.8 其他资源 66
第8章 数据层指导原则 67
做.NET 或是微软平台的架构设计既简单又困难。说简单的理由是,微软提供的产品往往考虑全面,容易上手,并且文档丰富。说困难的理由是,微软往往没有什么权威性的“指南”推荐说A方面可以用X 技术,B 方面可以用Y 技术(比如JAVA 开发流行的Struts2+Spring+Hibernate 框架),甚至更大的问题是(特别是前几年)微软没有提供针对一些常见技术(比如ORM/MVC/AOP)的“官方”实现。这就使得.NET 平台的一些系统的架构五花八门,有的架构师愿意自己写一些轻量级的实现,有的则愿意使用从JAVA 移植过来的一些实现,比如NHibernate、Spring.NET 等。
而现在,《微软应用架构指南》这本书针对前面提到的问题提供了一个不错的答案,它针对不同的技术点或应用场景或应用程序的类型,给出了一些微软平台(甚至开源界)可用的或是推荐的一些技术或框架,还介绍了何时适用这些技术和框架及在处理这些点的时候应该考虑的问题。更重要的是,微软在近几年确实针对很多技术提供了微软自己的实现,比如ORM 框架ADO.NET EntityFramework、SOA 框架WCF、MVC 框架ASP.NET MVC,等等。对于那些对框架的选择头疼(想引入非官方框架却又怕遇到难以解决的问题)的技术人员和架构师来说确实是好消息。
在翻译和阅读本书的过程中,译者有几点体会和读者一起分享。
(一)如何使用本书?
作者不止一次提到本书是一个大纲而不是大全,本书的重点在于介绍架构设计的方法学;架构设计中要考虑哪些方面的问题,这些问题有哪些技术可以解决或实现;微软平台有哪些应用程序类型,这些应用程序有哪些技术可以实现;应用程序怎么进行拆分,拆分后的每一部分可以由哪些技术来实现。也就是说本书主要解释的是有哪些“东西”以及这些“东西”可以由什么来实现这两个问题。对于后者,由于篇幅的关系只能列出技术或方法的名字然后提供一个参考链接。
我们知道,对于架构设计来说,其中包含的技术、框架、原则不太可能靠几小时或几天来彻底了解透彻,应该通过阅读本书来了解我们手里有哪些“东西”,这些“东西”适合什么样的应用场景。如果在之后架构设计的过程中你发现可以并且适用这个技术,可以进一步深入阅读和研究这些扩展资料。个人认为应该这样阅读本书:首先把自己不知道的知识点通读补全,然后可以把本书当作一本参考书,在实际架构设计的过程中根据自己的记忆能回忆起“这个问题好像在书中提到过可以用XXX 来解决”,那么再拿起本书找一些书中列出的参考链接或在网上找一些参考资料进一步学习。
(二)读不懂怎么办?
译者认为本书针对的是架构师和有架构经验的开发人员,如果读者刚接触程序开发或从未对完整的系统或是系统的一个模块进行过架构设计(所谓架构设计可以理解为设计一个系统中需要哪些组件及各个组件之间如何协同工作,以及确保这个系统达到预计的质量和需求需要做的工作),那么确实会比较难理解本书,在经过了自己的实践尝试之后回头再阅读本书您会发现不再是完全看不懂了,而是可以知道自己要了解的那部分内容可以在哪里找到答案。其实,即使是经验丰富的开发人员和架构师也可能会遇到不理解的内容,因为微软平台的技术是如此广泛,我们的工作往往关注的是某个平台的开发,比如桌面应用程序、移动应用程序、网站等,而不会面面俱到,因此您完全可以不必介意读不懂哪部分内容,有的只需要了解即可。
对于每一个方面,本书会列出许多需要考虑的要点,需要实现的步骤,能使用的技术。列出的这些条目源自许多技术专家在针对这方面进行架构设计时积累的经验,如果读者进行过这样的考虑甚至是尝试,就会容易理解作者想表达的意思,甚至会在读到这个条目后暗自叫好。译者就有这样的体会,由于自己做过一些横切关注点的框架实现,在阅读横切关注点一章时,看到和自己的思考吻合的一些条目时,才能体会到小小的一行条目包含了作者大量尝试后的经验和体会(十几个字归纳了译者经过几小时甚至几天的实践得出的结论)。相反,对于一些自己不熟悉的技术,确实也难以彻底理解每一个条目。因此,如果读者正在从事相关架构设计或开发的话,可以再仔细阅读每一部分内容下的一些子条目,或许你可以有新的发现。
(三)如何进行架构设计?
如何进行架构设计是本书讨论的重点,译者认为最主要的是权衡、渐进两点。所谓权衡,就是我们在进行架构设计的时候首先需要找出我们的目标包括哪些因素,每一个因素又需要达到怎么样的指标;然后根据这些因素的重要程度结合我们实际情况(软硬件、成本、资源)等等权衡得出一种比较适合的架构。所谓渐进就是架构设计和软件开发相似,应该是一个迭代的过程,每一个系统都会经历从少到多,从简单到复杂的过程,我们的架构往往只需要满足当前的负载即可,过于超前的考虑会带来不必要的成本,随着时间的推移,我们可以通过不断演化架构来满足新的功能和负载需求。其次,在为一个大型系统做架构设计的时候,可以先考虑把这个架构划分成独立的关注点,然后针对每一个点,分别进行方案制定、技术评估、开发测试等过程,最后把每一个点的方案合并在一起组成一个完整的架构。另外,对于架构设计中引入的技术根据项目的性质可以采用不同的策略,如果是一个内部项目,面向少量用户并且不会是一个长期的项目,那么可以考虑引入一些新技术、新框架,如果是一个外部项目,面向大量的访问并且需要保持数年的稳定,那么一定要慎用一些未经验证的新技术,慎用一些我们不能掌控的框架,否则一旦出现问题我们很难在短时间解决。
本书的前半部分(从第1 章开始到第19 章)由我翻译,后半部分(从第20 章开始到最后)由我的同事高翔翻译。由于时间和能力的关系,翻译中肯定有很多不足,欢迎大家提出自己的意见和建议。同样欢迎读者和我探讨有关架构和设计的问题,我的邮箱是yzhu@live.com。
朱晔
2010年10月
序一
在使用我们自己的技术来构建微软产品,以及平时和客户及合作伙伴一起工作的过程中,我们已经形成了一套关于如何使用我们的技术为应用架构及设计模式和原则去应用最佳实践的最佳实践。这个指南对开发人员和解决方案架构师来说都非常有用。我们从内部实践、外部专家、客户和其他社区人员中收集了一些指导原则,并整合成这本《微软应用架构指南》供大家分享。
该指南旨在帮助解决方案架构师和开发人员在微软平台上更有效地设计和构建应用程序,以及协助他们在新项目初期做出关键决策,同时提供特定主题的内容来帮助架构师和开发人员改善既有的解决方案。有超过25 个外部专家和客户为该指南做出了贡献和进行了审阅。
通过思考一个解决方案的架构模式和原则、质量特性及横切关注点等方面,我们可以快速得出一个基准应用架构和相关的技术、模式及指导原则,来帮助您构建解决方案。然后我们可以使用该指南来确定应用架构中的关键点,这样您就可以根据应用场景来完善应用架构。
本指南包含了Web、富客户端、RIA、移动、服务应用程序等常见应用程序类型的参考应用架构,以及有关质量特性、横切关注点、设计方法的一些指导原则,它可以帮助您设计和完善解决方案架构。
我们有信心,《微软应用架构指南(第2 版)》可以帮助您选择正确的架构和技术,选择恰当的模式,以便帮助您做出更有效的设计决策。
S.Somasegar
微软开发部高级副总裁
序二
本领域各种各样的书籍、文章、白皮书都表明,应用架构是一个富有挑战性的主题。开发人员和架构师仍然很难理解基于微软平台的架构和最佳实践设计。最初的《.NET 应用架构:设计应用程序和服务》已经在这方面做了很多出色的工作,但是这书写于2002 年。
为了应对从那以后出来的新技术,J. D. Meier, David Hill 和他来自微软模式和实践的团队已经建立了一套新的应用架构指南,该指南为设计运行于微软平台下的应用程序和服务提供了深入的指导,并且是基于最新最佳的实践技术。《微软应用架构指南第2 版》的诞生,旨在帮助解决方案架构师和开发人员在微软架构平台上设计更有效的应用程序。该指南不仅涵盖了.NET 框架、微软平台以及它们相关的主要技术和特性,同时它还提供了平台无关的、面向模式的和基于原则的指导,以帮助您为应用程序打好坚实基础。
该指南基于一些提供结构的关键架构和设计原则。其中包括有关确定和处理关键工程决策的指导原则,指南还提供了对质量特性、横切关注点的解释,以及诸如性能、安全性、可伸缩性、可管理性、部署、通信等构成您应用架构的性能。
指南还介绍了每个解决方案架构师在元级别应该考虑的逻辑层和物理层。对于每一个逻辑层和物理层,都介绍了其关注点、功能、能力、常见设计模式及技术。然后在这些基础之上,进而介绍相关的原则、模式和实践,最后提供了公认的应用程序典型来演示常用应用类型,并介绍其目标场景、模式和它所包含的基础结构。
整体而言,该指南建立在微软专家、微软合作伙伴、客户以及社区里的其他成员的综合经验及知识之上。它将帮助您理解我们的平台,选择恰当的架构和技术,使用经过验证的实践和知识来构建应用程序。
Scott Guthrie
微软.NET 开发平台副总裁
| 2011年出版的计算机与网络图书:力图从传播知识与应用层次谈计算机与互联网,从人文角度介绍相关 知识与技术,以客观的态度,独特的视角,生动的方式,将重要实用的知识、信息、技能、经验及时奉 献给读者。 |