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