第1章 设计新的体系结构 1
1.1 可随意选择三层或五层 1
1.1.1 用户服务层 2
1.1.2 业务服务层 2
1.1.3 数据服务层 3
1.1.4 五层而不是三层 3
1.2 使用ADO记录集 4
1.2.1 在服务器之间传送数据 5
1.2.2 使用层次化的ADO记录集 6
1.3 XML是长期的解决方案 10
第2章 可扩展性设计 12
2.1 可扩展性是关于节约资源的 12
2.2 三层服务模型 13
2.2.1 三种不同的用户界面 13
2.2.2 用户和用例需要解决方案 14
2.2.3 有限可扩展性的经典实现 16
2.2.4 在数据库中保持永久状态 17
2.2.5 如可能,将临时状态移动到客户端 18
2.3 三种类型的业务服务 20
2.3.1 外观服务 21
2.3.2 主业务服务 21
2.3.3 数据访问服务 21
2.4 Visual Basic、COM+和MTS在何处适用 22
2.4.1 在用户服务层的Visual Basic 22
2.4.2 在业务服务层使用Visual Basic 22
2.4.3 MTS和COM+的任务 23
2.5 小结 23
第3章 规则及其位置 24
3.2 8条规则 25
3.3 在何处实现规则 25
3.1 工作 25
第4章 实现规则 30
4.1 数据库 30
4.2 规则1:在国家中喂养 31
4.2.1 外关键字约束 31
4.2.2 遵循ANSI标准 32
4.2.3 作为最后防线的数据库 33
4.2.4 规则1启动 35
4.3 规则2:有且只有一个训练师 35
4.4 规则3:性别值必须有效 36
4.5 规则4:允许改变的性别 39
4.5.1 触发器方案 39
4.5.2 Visual Basic解决方案 45
4.5.3 规则4启动 48
4.6 规则5:年龄在1~15之间 50
4.7 规则6:不要删除至少已经参与一场比赛的马匹 51
4.8 规则7:名字和喂养的国家的组合必须唯一 56
4.9 规则8:在做插入操作时,要有唯一的ID 57
4.10 小结 58
第5章 对第一个业务层进行模型化 59
5.1 层和类 59
5.2 对用户服务和外观进行模型化 61
5.2.1 类图 61
5.2.2 从数据库中得到选择的马的集合 62
5.2.3 选择所显示的某匹马 64
5.2.4 把马的数据呈现在多个窗体域中 66
5.2.5 改变窗体域的内容 66
5.2.6 保存修改 66
5.2.7 删除一匹马 68
5.2.8 获得新的空记录来添加一匹新马 69
第6章 减少投入市场的时间 70
6.1 良好的配合 70
6.2.1 产生代码 71
6.2 使用测试存根 71
6.2.2 在Visual Basic中的项目 75
6.2.3 生成的代码 76
6.2.4 自己的代码 77
6.2.5 保持其清洁 82
6.3 测试窗体 83
6.3.1 获得马的列表 83
6.3.2 获得单匹马的信息 85
6.3.3 第一次设计验证 86
6.3.4 加强外观类和测试窗体 87
6.3.5 是XML又怎样? 90
第7章 将DHTML用户界面进行原型化 91
7.1 早期的动态GUI原型 91
7.2.1 RDS DataSpace对象 93
7.2.2 获得马的列表 93
7.2 一些脚本例子 93
7.2.3 选择一匹马 95
7.2.4 动画 96
7.2.5 最后的例子 97
7.3 使用脚本中独立的界面 97
7.4 返回到服务方 98
8.2.1 分配GetHorseList方法 99
8.2 分配给实体和集合类 99
8.1 重新设计外观类 99
第8章 设计主业务层 99
8.2.2 分配GetHorseByld方法 101
8.2.3 分配其他外观操作 104
8.3 将它们命名为管理者 106
8.4 重新命名包 107
第9章 使用独立的COM接口 109
9.1 控制连接 109
9.1.1 一个非常可能的方案 109
9.1.2 好的解决方案——独立COM+接口 111
9.1.3 减少代码冗余度 112
9.1.4 可随意改变实现方法 114
9.2 生成COM接口 116
9.2.1 许多接口看起来一样 116
9.2.2 COM+和MTS中允许的角色 119
9.3 将返回类型参数传递给接口 123
第10章 实现外观类 125
10.1 生成主业务和接口代码 125
10.1.1 生成接口代码 126
10.1.2 生成实体管理代码 130
10.1.3 获得Country列表 130
10.1.4 增强代码 132
10.2 移动测试存根 133
10.2.1 实现外观类 134
10.2.2 测试结果 135
10.2.3 剩下的方法 136
10.3 为组合框获取训练师列表 137
10.3.1 从外观类开始 137
10.3.2 主业务实体类 137
10.4 获得马的名字列表 139
10.4.1 修改外观类 140
10.4.2 HorseManager类 141
10.4.3 获得单匹马 142
10.5 在工作中学习 144
第11章 简化设计 145
11.1 分析接口事件 145
11.2 简化和复用COM接口 147
11.2.1 历史回顾 147
11.2.2 目前的设计状态 148
11.2.3 简化接口 149
11.2.4 增加新接口到模型中 149
11.2.5 为接口项目生成代码 150
11.2.6 移走旧的接口 152
11.3 小结 153
第12章 委托数据访问 154
12.1 为什么不让实体管理器直接访问数据 154
12.1.1 COM+和MTS事务属性规则 154
12.1.2 位置透明和性能 156
12.2 独立的COM数据访问接口 157
第13章 实现管理器和数据访问 160
13.1 为数据访问类生成代码 160
13.1.1 生成的HorseFetcher类 160
13.1.2 生成的HorseTrSrvcs类 161
13.2 获取马匹列表 162
13.2.1 移植测试存根代码 162
13.2.2 调用GetListForNamePattern方法 163
13.2.3 测试结果——仍然使用测试存根代码 164
13.2.4 用真正的数据库访问代码替换测试存根 165
13.2.5 测试实际的数据库访问代码 166
13.3 获取马匹数据 166
13.3.1 获取驯马师和国家的数据 167
13.3.2 再次测试 168
13.4 存储马匹数据 168
13.5 删除(或作废)马匹数据 170
第14章 使用MTS 174
14.1 上下文对象 174
14.2 实现IObjectControl接口 175
14.2.1 CanBePooled方法 175
14.2.2 Deactivate方法 176
14.2.3 Activate方法 176
14.3 使组件适合于MTS 177
14.3.1 实现IObjectControl 177
14.3.2 调用SetComplete和SetAbort方法 179
14.3.3 创建其他MTS对象 180
14.3.4 设置事务属性 181
14.4 数据环境 182
14.5 友元和新关键字 182
14.6 注意事项 183
第15章 COM+概览 185
15.1 COM+的组件服务 185
15.1.1 队列组件 186
15.1.2 松散配对事件 191
15.1.3 对象池 192
15.2 COM+的基本思路 192
15.3 COM+的一些特性 192
15.3.1 实现继承 192
15.3.2 声明开发 193
15.3.3 COM+目录和组件服务插件 194
15.4 关于COM+的最终一般性思考 198
15.3.4 补偿资源管理器 198
15.5 Windows NT4.0上的COM+ 199
第16章 为应用程序实例创建COM+组件 200
16.1 IObjectControl接口 200
16.1.1 MTS中的IObjectControl接口 200
16.1.2 COM+中的IObjectControl接口 200
16.1.3 COM+中的上下文对象 203
16.1.4 方法级的安全角色 207
16.2 小结 208
第17章 确保良好的数据库性能与可扩展性 210
17.1 重用查询计划 210
17.1.1 缓存计划的存储过程 210
17.1.2 缓存和重用SQL语句 211
17.1.3 学习经验 215
17.2 使用存储过程 215
第18章 其他用例与外观 224
18.1.1 执行者 225
18.1 一些例子 225
18.1.2 用例 226
18.1.3 为用例服务的外观类 228
18.1.4 外观类构成主业务类的需求 230
18.2 设计主业务类 234
18.3 框架 239
第19章 对层次记录集的赞成和反对 242
19.1 关于窗体和编码的更多内容 243
19.1.1 跑道的组合框 244
19.1.2 赛马日期列表框 246
19.1.3 赛马网格 250
19.2 联系父子记录的三种不同方式 255
19.2.1 通过参数进行联系 255
19.2.2 域与域的关联 264
19.2.3 使用特殊的筛选器关联域与域 266
19.3 多于两层的层次结构 267
19.4 其他一些问题 268
19.5 小结 268
第20章 XML概览 270
20.1 XML特性 270
20.1.1 XML是已经确立的Web标准 271
20.1.2 XML是一种标记语言 271
20.1.3 XML文档的结构 271
20.1.4 XML是严格的而HTML不是 272
20.1.5 定义良好的文档 273
20.1.6 XML区分大小写 274
20.1.7 XML是很繁琐的 274
20.2 使用文档类型定义语言来定义模式 275
20.2.1 外部和内部DTD规范 275
20.2.2 在 Web页中显示文档 276
20.2.3 使XML文档无效 280
20.3 用XML数据定义模式 281
20.3.1 XML数据模式是XML文档 282
20.3.2 无效的XML代码 284
20.4 用XML和XML DOM编写脚本 285
20.6 使用XSL来表示XML文档 290
20.6.1 使用第1个XSL格式页 292
20.6.2 使用第2个XSL格式页 294
20.6.3 同一XSL格式页中的多个模板 296
20.7 最后一个通用的XML例子 297
第21章 有ADO 2.5支持并为开发组件服务的XML 300
21.1 ADO 2.5中的XML支持 301
21.1.1 把简单记录集转换成XML 301
21.1.2 转换多行记录集 305
21.1.3 把层次记录集转换到XML 307
21.2 SQL Server 2000和XML 308
21.3 简单对象访问协议 310
22.1 外关键字约束 311
第22章 业务规则 311
22.1.1 试图突破外关键字约束 312
22.1.2 检查外关键字错误 313
22.2 检验约束 313
22.3 唯一性约束 314
22.4 列标识 315
23.1 复杂事务 319
23.1.1 两种情况 319
第23章 最后几个问题 319
23.1.2 特殊事务管理器 326
23.2 COM+和MTS打包 327
23.2.1 易于打包 328
23.2.2 资源对象和真实业务对象 331
23.3 重访状态化模型 331
23.4 库包及库应用程序 332
23.5 连接字符串 333
23.6 新闻组服务 333