目录 1
译者序 1
第1章 由随意编程转变为遵循软件工程原则 1
1.1 规则1-1:最大限度地发挥VB编译期类型检查的潜能 2
原书序 3
1.1.1 在每个模块的顶端使用Option Explicit语句 3
1.1.2 避免不经意地使用Variant数据类型 4
致谢 5
1.1.3 在VB IDE中运行时,使用Start With Full Compile命令 6
1.2 规则1-2:使用Debug.Assert显式声明假设 7
1.3 规则1-3:编译期条件不同时,考虑使用#If语句 11
1.4 规则1-4:抛出错误以提示异常 15
1.5 规则1-5:有效的错误处理:局部捕获,全局处理 20
1.6 规则1-6:了解类型和类的区别 27
1.7 规则1-7:采用面向对象的设计方法 32
1.8 规则1-8:推荐采用用户自定义类型而不是类来定义值类型 38
1.9 规则1-9:一般任务的自动化 41
第2章 设计、构建和使用基于COM的组件 49
2.1 规则2-1:从接口的角度进行思考 50
2.2 规则2-2:使用自定义接口 51
2.3 规则2-3:最好使用IDL独立定义自定义接口 59
2.4 规则2-4:使用自定义回调避免基于类的事件的局限性 66
2.5 规则2-5:要谨慎保持兼容性 72
2.5.1 脚本客户端程序 73
2.5.2 已编译的客户端程序 75
2.5.3 版本兼容的接口 77
2.6 规则2-6:选用正确的COM激活技术 79
2.6.1 COM激活 81
2.6.2 New操作符 81
2.6.3 CreateObject 82
2.6.4 GetObject 83
2.6.5 GetObjectContext.CreateInstance和Server.CreateObject 84
2.6.6 性能考虑 85
2.7 规则2-7:慎重使用Class_Terminate 88
2.8 规则2-8:根据会话而不是实体来建模 90
2.9 规则2-9:除了简单的小规模应用系统,避免使用ActiveX可执行程序 94
第3章 MTS、COM+和VB——中间层 98
3.1 规则3-1:理解MTS和COM+应用程序设计 99
3.2 规则3-2:不要在MTS或COM+中使用单例 101
3.3 规则3-3:了解New、CreateObject及GetObjectContext.CreateInstance的适用场合 103
3.3.1 MTS和Windows NT4 104
3.3.2 COM+和Windows 2000 109
3.3.3 使用New遇到的更多问题 109
3.4 规则3-4:理解使用SetComplete的真实目的 110
3.5 规则3-5:对事务自动中止方式的思考 114
3.6 规则3-6:不要重新设计DBMS 117
3.7 规则3-7:不必配置所有组件 122
3.8 规则3-8:避免将以后会后悔的东西编译进DLL 124
3.9 规则3-9:将代码从MTS向COM+移植的实践技巧 128
3.9.1 在COM+中不再需要调用GetObjectContext.CreateInstance 128
3.9.2 将Me作为参数传递时,不再需要调用SafeRef 128
3.9.3 当事务中的次要对象返回错误时要小心;可能会获得形如“Method~of Object Failed~”的错误信息,而不是所指定的在错误传播之前返回的丰富错误信息 129
3.9.4 使用ObjectConstruct字符串 129
3.9.5 在COM+应用程序中进行进程内调用时执行声明性安全校验 130
3.9.6 在COM+中刷新组件命令不再是必需的 131
3.9.7 在安装Windows 2000以前版本的计算机上,COM+导出的客户安装程序需要Microsoft Installer(MSI) 131
3.10 规则3-10:编写运行于MTS和COM+中的代码的实践技巧 132
3.10.1 创建对象时坚持使用GetObjectContext.CreateInstance 132
3.10.2 使用可编程控制的安全措施对访问权限进行校验,而不要依赖于声明性安全措施 132
3.10.3 事务性方法调用失败时,在次要对象中最好使用DisableCommit而不是SetAbort 133
3.10.4 不要无意中将DLL安装到用户计算机上 133
3.10.5 坚持使用ObjectContext接口 134
3.10.6 分发对象引用时继续使用SafeRef 134
4.1 规则4-1:理解IIS体系结构 135
第4章 Web和VB 135
4.1.1 IIS的内部结构 136
4.1.2 提高服务器的可扩缩性 140
4.2 规则4-2:管理应用程序状态以达到最高效率 141
4.2.1 使用BAS模块数据 142
4.2.2 使用SPM 144
4.2.3 使用ASP Application对象 146
4.2.4 权衡各种方案的利弊 147
4.3 规则4-3:管理会话状态以达到最大可扩缩性 148
4.3.1 将会话限制在单机上 149
4.3.2 在客户机上存储会话信息 150
4.3.3 使用cookie 150
4.3.4 QueryString变量 152
4.3.5 隐藏的表单域 153
4.3.6 在数据库中存储状态信息 154
4.4.1 使用RPC和DCOM进行通信 155
4.4 规则4-4:理解DCOM和HTTP的区别 155
4.4.2 使用HTTP通信 156
4.4.3 在分布式应用程序中不使用ASP 157
4.4.4 使用HTTP的不利方面 159
4.5 规则4-5:为脚本环境(如ASP)编写COM组件 160
4.5.1 创建默认接口 160
4.5.2 向可编写脚本的对象传递参数 161
4.5.3 关于自定义接口 162
4.5.4 解决方案 163
4.6 规则4-6:理解COM对象与ASP之间如何交互 167
4.6.1 ASP内置对象 167
4.6.2 VB COM对象和STA 168
4.6.3 充分利用STA线程模型 168
4.6.4 在VB中如何访问ASP内置对象 171
4.6.5 直接访问ASP内置对象的好处 171
4.6.6 使用ASP内置对象的弊端 172
4.7 规则4-7:使用XML代替专有数据传输格式 173
4.8 规则4-8:慎重考虑表示和业务逻辑的关系 180
4.8.1 使用MTS组件 181
4.8.2 使用WebClasses 183
4.9 规则4-9:从数据到表示的XSLT实现 186
4.9.1 XSLT的概念 186
4.9.2 XSLT方法的好处 188
4.9.3 使用过程方法转换数据集 188
4.9.4 利用XSLT的方法转换数据集 190
4.9.5 XSLT的缺点 195
第5章 VB高效数据访问 197
5.1 规则5-1:高效访问的基础:往返开销、SQL语句和数据提供者 197
5.1.1 使往返开销最少 198
5.1.2 确定发送SQL查询的最好方法 199
5.1.3 选择合适的提供者 200
5.2 规则5-2:不要过分封装数据访问 202
5.2.1 纯粹的面向对象技术 203
5.2.2 追求纯粹OOD效果的不足之处 205
5.2.3 解决办法:使用存储过程 206
5.2.4 如果需要多个数据库服务器该如何处理 210
5.3 规则5-3:切莫将数据库连接当作数据成员 211
5.4 规则5-4:死锁是常见的——防错性程序开发 214
5.4.1 锁定 214
5.4.2 串行化事务和锁管理器 214
5.4.3 死锁 215
5.4.4 在应用程序设计中尽量减小死锁的几率 217
5.4.5 将事务运行时间降至最短 217
5.4.6 将锁定时间降至最短 218
5.5 规则5-5:尽可能使用firehose游标 218
5.6 规则5-6:作出正确的数据搜索决策(避免滥用SelectSingleNode) 223
5.6.1 Seek-and-Find组件 223
5.6.2 了解解决具体问题需选用哪一种方法 226