软件架构和设计篇 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
5.4.1 第一步:选择您的分层策略 42
5.4.2 第二步:确定您需要的分层 43
5.4.3 第三步:确定如何分布层和组件 43
5.4.4 第四步:确定是否需要收缩层 43
5.4.5 第五步:确定层之间交互的规则 44
5.4.6 第六步:找出横切关注点 44
5.4.7 第七步:定义层之间的接口 44
5.4.8 第八步:选择您的部署策略 45
5.4.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
8.1 概览 67
8.2 总体设计考量 68
8.3 特定设计问题 69
8.3.1 批量处理 69
8.3.2 二进制大对象 70
8.3.3 连接 70
8.3.4 数据格式 70
8.3.5 异常管理 71
8.3.6 对象关系映射 71
8.3.7 查询 72
8.3.8 存储过程 72
8.3.9 存储过程和动态SQL 72
8.3.10 事务 73
8.3.11 验证 74
8.3.12 XML 74
8.4 技术考量 75
8.5 性能考量 75
8.6 安全考量 76
8.7 部署考量 76
8.8 数据层的设计步骤 76
8.9 相关设计模式 77
8.10 其他资源 78
第9章 服务层指导原则 81
9.1 概览 81
9.2 设计考量 82
9.3 具体设计问题 83
9.3.1 身份验证 83
9.3.2 授权 83
9.3.3 通信 84
9.3.4 异常管理 84
9.3.5 消息信道 84
9.3.6 消息构建 85
9.3.7 消息端点 85
9.3.8 消息保护 85
9.3.9 消息路由 86
9.3.10 消息转换 86
9.3.11 服务接口 86
9.3.12 验证 87
9.4 REST和SOAP 87
9.4.1 REST设计考量 88
9.4.2 SOAP设计考量 88
9.5 技术考量 89
9.6 部署考量 89
9.7 服务层的设计步骤 90
9.8 相关设计模式 90
9.9 其他资源 93
第10章 组件指导原则 95
10.1 概览 95
10.2 组件设计总体指导原则 95
10.3 分层组件分布 96
10.4 表现层组件 96
10.5 服务层组件 97
10.6 业务层组件 97
10.7 数据层组件 98
10.8 横切组件 99
10.9 相关设计模式 99
10.10 模式和实践团队提供的产品 100
10.11 其他资源 101
第11章 设计表现组件 103
11.1 概览 103
11.2 第一步:理解UI需求 103
11.3 第二步:确定需要的UI类型 104
11.4 第三步:选择UI技术 104
11.5 第四步:设计表现组件 106
11.5.1 用户界面组件 106
11.5.2 表现逻辑组件 107
11.5.3 表现模型组件 107
11.5.4 表现实体 108
11.6 第五步:确定绑定需求 109
11.7 第六步:确定错误处理策略 110
11.8 第七步:确定验证策略 111
11.9 模式和实践团队提供的产品 111
11.10 其他资源 112
第12章 设计业务组件 113
12.1 概览 113
12.2 第一步:确定您的应用程序将会使用的业务组件 113
12.3 第二步:为业务组件进行关键决策 114
12.4 第三步:选择合适的事务支持 114
12.5 第四步:确定如何处理业务规则 115
12.6 第五步:确定满足需求的模式 116
12.7 其他资源 117
第13章 设计业务实体 119
13.1 概览 119
13.2 第一步:选择表现方式 119
13.3 第二步:为业务实体选择设计 120
13.4 第三步:确定序列化支持 120
13.5 领域驱动设计 121
13.6 其他资源 122
第14章 设计业务工作流 123
14.1 概览 123
14.2 第一步:根据应用场景确定工作流风格 123
14.3 第二步:选择编写模式 124
14.4 第三步:确定如何处理规则 124
14.5 第四步:选择工作流解决方案 124
14.6 第五步:设计业务组件来支持工作流 125
14.6.1 Windows Workflow Foundation 125
14.6.2 BizTalk服务器 126
14.6.3 带ESB的BizTalk 126
14.6.4 结合使用Windows Workflow Foundation和BizTalk 127
14.7 其他资源 128
第15章 设计数据组件 129
15.1 概览 129
15.2 第一步:选择数据访问技术 129
15.3 第二步:选择如何从数据源获取和持久化业务对象 130
15.4 第三步:确定如何连接数据源 130
15.4.1 连接 130
15.4.2 连接池 131
15.4.3 事务和并发 132
15.5 第四步:确定处理数据源错误的策略 133
15.5.1 异常 133
15.5.2 重试逻辑 133
15.5.3 超时 134
15.6 第五步:设计服务代理组件(可选) 134
15.7 其他资源 134
第16章 质量特性 135
16.1 概览 135
16.2 常见质量特性 135
16.2.1 可用性 137
16.2.2 概念完整性 137
16.2.3 互操作性 138
16.2.4 可维护性 138
16.2.5 可管理性 139
16.2.6 性能 139
16.2.7 可靠性 140
16.2.8 可重用性 140
16.2.9 可伸缩性 141
16.2.10 安全性 141
16.2.11 可支持性 142
16.2.12 可测试性 142
16.2.13 用户体验/易用性 143
16.3 其他资源 143
第17章 横切关注点 145
17.1 概览 145
17.2 总体设计考量 145
17.3 具体设计问题 146
17.3.1 身份验证 146
17.3.2 授权 147
17.3.3 缓存 147
17.3.4 通信 148
17.3.5 配置管理 148
17.3.6 异常管理 149
17.3.7 日志和指示器 149
17.3.8 状态管理 150
17.3.9 验证 150
17.4 缓存的设计步骤 151
17.4.1 第一步:确定要缓存的数据 151
17.4.2 第二步:确定数据缓存在哪里 151
17.4.3 第三步:确定缓存数据的格式 152
17.4.4 第四步:确定合适的缓存管理策略 152
17.4.5 第五步:确定如何加载缓存数据 153
17.5 异常管理的设计步骤 154
17.5.1 第一步:确定需要处理的异常 154
17.5.2 第二步:确定您的异常检测策略 154
17.5.3 第三步:确定异常的传播策略 154
17.5.4 第四步:确定您自定义异常的策略 155
17.5.5 第五步:确定需要收集的信息 155
17.5.6 第六步:确定异常日志记录策略 156
17.5.7 第七步:确定您的异常通知策略 156
17.5.8 第八步:确定如何处理未处理异常 156
17.6 验证输入和验证数据的设计步骤 157
17.6.1 第一步:确定信任边界 157
17.6.2 第二步:确定关键应用场景 157
17.6.3 第三步:确定哪里需要验证 157
17.6.4 第四步:确定验证策略 158
17.7 相关设计模式 158
17.8 模式和实践团队的解决方案产品 158
17.9 其他资源 159
第18章 通信和消息 161
18.1 概览 161
18.2 总体设计指导原则 161
18.3 基于消息通信的指导原则 162
18.3.1 异步和同步通信 163
18.3.2 耦合和内聚 163
18.3.3 数据格式 163
18.3.4 互操作性 164
18.3.5 性能 165
18.3.6 状态管理 165
18.4 契约先行设计 165
18.5 安全考量 166
18.5.1 传输安全 166
18.5.2 消息安全 167
18.6 技术选项 167
18.6.1 WCF技术选项 167
18.6.2 ASMX技术选项 168
18.7 其他资源 168
第19章 物理层和部署 169
19.1 概览 169
19.2 分布式和非分布式部署 169
19.2.1 非分布式部署 169
19.2.2 分布式部署 170
19.2.3 分布式环境的性能和设计考量 170
19.2.4 针对分布式部署中定位组件的一些建议 171
19.3 分布式部署模式 172
19.3.1 客户端/服务端部署 172
19.3.2 N层部署 172
19.3.3 两层部署 172
19.3.4 三层部署 173
19.3.5 四层部署 173
19.3.6 Web应用程序部署 173
19.3.7 富互联网应用程序部署 174
19.3.8 富客户端应用程序部署 174
19.4 性能模式 174
19.4.1 负载均衡集群 175
19.4.2 亲和性和会话技术 175
19.4.3 应用农场 176
19.5 可靠性模式 176
19.5.1 故障转移集群 176
19.6 安全性模式 177
19.6.1 模拟和委派 177
19.6.2 信任子系统 178
19.6.3 多重信任服务标识 178
19.7 纵向扩展和横向扩展 179
19.7.1 纵向扩展的考量 179
19.7.2 设计以支持横向扩展 179
19.7.3 设计的牵制和权衡 180
19.8 络基础结构的安全考量 181
19.9 可管理性考量 182
19.10 相关设计模式 182
19.11 其他资源 183
应用程序原型篇 185
第20章 选择应用程序类型 187
20.1 概述 187
20.2 应用程序原型小结 187
20.2.1 应用程序类型优缺点 188
20.3 移动应用程序 189
20.4 富客户端应用程序类型 190
20.5 富Internet程序原型 191
20.6 服务应用程序类型 192
20.7 Web应用程序类型 193
第21章 设计Web应用程序 195
21.1 概述 195
21.2 通用设计考量 196
21.3 特定的设计考量 196
21.3.1 应用程序提交过程 197
21.3.2 身份验证 198
21.3.3 授权 198
21.3.4 缓存 198
21.3.5 异常管理 199
21.3.6 日志和规范 199
21.3.7 导航 199
21.3.8 页面布局 200
21.3.9 页面渲染 200
21.3.10 Session管理 201
21.3.11 验证 201
21.4 层设计中的考量 202
21.4.1 表现层 202
21.4.2 业务层 202
21.4.3 数据层 202
21.4.4 服务层 202
21.5 测试及可测试性的考量 203
21.6 技术考量 203
21.7 部署考量 204
21.7.1 非分布式部署 204
21.7.2 分布式部署 204
21.7.3 负载均衡 205
21.8 相关的设计模式 206
21.9 其他资源 207
第22章 设计富客户端应用程序 209
22.1 概述 209
22.2 通用设计考量 210
22.3 特定的设计考量 211
22.3.1 业务层 211
22.3.2 通信 211
22.3.3 组合 212
22.3.4 配置管理 213
22.3.5 数据访问 213
22.3.6 异常管理 214
22.3.7 可维护性 214
22.3.8 表现层 215
22.3.9 状态管理 215
22.3.10 工作流 216
22.4 安全考量 216
22.5 数据处理考量 217
22.5.1 缓存数据 217
22.5.2 数据并发 218
22.5.3 数据绑定 218
22.6 离线/偶尔连线情况的设计考量 218
22.7 技术考量 219
22.8 部署考量 220
22.8.1 独立部署 220
22.8.2 客户端/服务器端部署 220
22.8.3 N层部署 220
22.8.4 部署技术 221
22.9 相关的设计模式 221
22.10 其他资源 223
第23章 设计富Internet应用程序 225
23.1 概述 225
23.2 通用设计考量 226
23.3 特定的设计考量 227
23.3.1 业务层 228
23.3.2 缓存 228
23.3.3 通信 229
23.3.4 组合 229
23.3.5 数据访问 230
23.3.6 异常管理 230
23.3.7 日志 230
23.3.8 媒体和图形 231
23.3.9 可移动性 231
23.3.10 可移植性 232
23.3.11 表现层 232
23.3.12 状态管理 232
23.3.13 验证 233
23.4 安全考量 233
23.5 数据处理考量 234
23.6 技术考量 234
23.7 部署考量 236
23.7.1 RIA插件安装 236
23.7.2 分布式部署 236
23.7.3 负载均衡 237
23.7.4 Web农场的优缺点 238
23.8 相关的设计模式 238
23.9 其他资源 239
第24章 设计移动应用程序 241
24.1 概述 241
24.2 通用设计考量 242
24.3 一些特定的设计考量 243
24.3.1 身份验证和授权 243
24.3.2 缓存 244
24.3.3 通信 244
24.3.4 配置管理 245
24.3.5 数据访问 245
24.3.6 设备相关 246
24.3.7 异常管理 246
24.3.8 日志 247
24.3.9 移植应用程序 247
24.3.10 功耗管理 248
24.3.11 同步 248
24.3.12 测试 249
24.3.14 用户界面 249
24.3.15 验证 250
24.4 技术考量 250
24.4.1 Microsoft Silverlight for Mobile 250
24.4.2 NET Compact Framework 251
24.4.3 Windows Mobile 251
24.4.4 Windows Embedded 252
24.5 部署考量 252
24.6 相关设计模式 253
24.7 其他资源 254
第25章 设计服务应用程序 255
25.1 概述 255
25.2 通用设计考量 256
25.3 特定的设计考量 257
25.3.1 身份验证 258
25.3.2 授权 258
25.3.3 业务层 258
25.3.4 通信 259
25.3.5 数据层 259
25.3.6 异常管理 260
25.3.7 消息结构 260
25.3.8 消息端点 260
25.3.9 消息保护 261
25.3.10 消息转换 261
25.3.11 消息交换模式 262
25.3.12 表述性状态传输 262
25.3.13 服务层 263
25.3.14 SOAP 264
25.3.15 验证 264
25.4 技术考量 265
25.5 部署考量 265
25.6 相关设计模式 266
25.7 其他资源 268
第26章 设计托管和云服务 269
26.1 概述 269
26.1.1 云计算 269
26.1.2 托管和云服务的通用词汇 270
26.2 云端应用程序的好处 271
26.2.1 针对ISV和服务托管的好处 271
26.2.2 针对消费服务企业的好处 272
26.3 设计考量 272
26.3.1 数据隔离和共享 272
26.3.2 数据安全 274
26.3.3 数据的存储和扩展 275
26.3.4 标识管理 277
26.3.5 多重租赁 278
26.3.6 内部托管还是外部托管,构建还是购买 279
26.3.7 性能 280
26.3.8 服务组合 280
26.3.9 服务集成 282
26.3.10 服务管理 283
26.4 相关设计模式 284
26.5 其他资源 284
第27章 设计Office业务应用程序 287
27.1 概述 287
27.1.1 构成Office务应用程序的组件 288
27.2 Office业务应用程序的关键场景 288
27.2.1 企业内容管理 289
27.2.2 商业智能 289
27.2.3 统一消息 290
27.3 通用的OBA模式 290
27.3.1 扩展的到达通道 290
27.3.2 文档整合 291
27.3.3 文档工作流 293
27.3.4 组合用户界面 293
27.3.5 数据合并(导航发现) 294
27.3.6 协作 296
27.3.7 通知和任务 296
27.4 通用设计考量 297
27.5 安全考量 298
27.6 部署考量 298
27.7 相关设计模式 298
27.8 其他资源 299
第28章 设计SharePoint LOB应用程序 301
28.1 概述 301
28.1.1 SharePoint LOB应用程序的逻辑层 302
28.1.2 物理层部署 302
28.2 关键场景和特性 303
28.3 通用设计考量 303
28.4 特定的设计考量 304
28.4.1 业务数据目录 304
28.4.2 文档和内容存储 305
28.4.3 Excel服务 305
28.4.4 InfoPath表单服务 306
28.4.5 SharePoint对象模型 306
28.4.6 Web Parts 307
28.4.7 工作流 307
28.5 技术考量 308
28.6 部署考量 308
28.7 相关设计模式 308
28.8 其他资源 309
附录 312
附录A 微软应用程序平台 313
A.1 概述 313
A.2 相关的信息和资源 314
A.2.1 微软是怎样在Web上组织技术信息的 314
A.2.2 Microsoft Developer Network 314
A.2.3 Microsoft TechNet 315
A.3 NET框架 315
A.4 公共语言运行时 315
A.5 数据访问 315
A.6 移动应用程序 316
A.7 富客户端 317
A.8 富Internet应用程序 317
A.9 服务 318
A.10 工作流 318
A.11 Web应用程序 319
A.12 Web服务器——Internet信息服务 319
A.13 数据库服务器——SQIServer 320
A.14 Visual Studio开发环境 320
A.15 其他的工具和库 320
A.15.1 模式和实践团队的解决方案产品 320
A.16 其他资源 321
附录B 表现方面的技术矩阵 323
B.1 概述 323
B.2 表现层技术小结 323
B.2.1 移动应用程序 323
B.2.2 富客户端应用程序 323
B.2.3 富Internet应用程序 324
B.2.4 Web应用程序 324
B.3 优缺点矩阵 325
B.3.1 移动应用程序 325
B.3.2 富客户端应用程序 326
B.3.3 富Internet应用程序 326
B.3.4 Web应用程序 327
B.4 通用的场景和解决方案 328
B.4.1 移动应用程序 328
B.4.2 富客户端应用程序 328
B.4.3 富Internet应用程序 329
B.4.4 Web应用程序 329
B.5 其他资源 330
附录C 数据访问的技术矩阵 331
C.1 概述 331
C.2 数据访问技术小结 331
C.3 优缺点矩阵 332
C.3.1 对象-关系数据访问 332
C.3.2 断线和离线场景 333
C.3.3 SOA/服务场景 333
C.3.4 N层及通用场景 333
C.4 通用建议 335
C.5 通用的场景和解决方案 335
C.6 LINQ to SQL的缺点 336
C.7 移动解决方案的缺点 337
C.8 其他资源 337
附录D 整合方面的技术矩阵 339
D.1 概述 339
D.2 整合技术小结 339
D.3 优缺点矩阵 339
D.4 通用的场景和解决方案 341
D.5 其他资源 342
附录E 工作流方面的技术矩阵 343
E.1 概述 343
E.2 整合技术小结 343
E.3 人力工作流VS.系统工作流 344
E.4 优缺点矩阵 344
E.5 通用的场景和解决方案 345
E.6 其他资源 345
附录F patterns & practices企业库 347
F.1 概述 347
F.2 企业库的目标 347
F.3 企业库的内容 347
F.3.1 应用程序块 348
F.4 缓存应用程序块 349
F.4.1 关键场景 349
F.4.2 何时使用 349
F.4.3 缺点 350
F.5 加密应用程序块 350
F.5.1 关键场景 350
F.5.2 何时使用 350
F.5.3 缺点 351
F.6 数据访问应用程序块 351
F.6.1 关键场景 351
F.6.2 何时使用 351
F.6.3 缺点 352
F.7 异常处理应用程序块 352
F.7.1 关键场景 352
F.7.2 何时使用 352
F.8 日志应用程序块 353
F.8.1 关键场景 353
F.8.2 何时使用 353
F.8.3 缺点 353
F.9 策略注入应用程序块 353
F.9.1 关键场景 354
F.9.2 何时使用 354
F.9.3 缺点 354
F.10 安全应用程序块 354
F.10.1 关键场景 355
F.10.2 何时使用 355
F.10.3 缺点 355
F.11 Unity应用程序块 355
F.11.1 关键场景 355
F.11.2 何时使用 356
F.11.3 缺点 356
F.12 验证应用程序块 356
F.12.1 关键场景 356
F.12.2 何时使用 356
F.12.3 缺点 357
F.13 其他资源 357
附录G 模式和实践团队模式目录 359
G.1 关于WPF和Silverlight的组合应用程序指南 359
G.2 数据迁移模式 360
G.3 企业解决方案中的模式 361
G.4 整合模式 363
G.5 Web服务安全模式 364
G.6 其他资源 365
索引 367