目 录 1
译者序 1
第1章 由随意编程转变为遵循软件工程原则 1
1.1规则1-1:最大限度地发挥VB编译期类型检查的潜能 2
原书序 3
1.1.1在每个模块的顶端使用Option Explicit语句 3
致谢 4
1.1.2避免不经意地使用Variant数据类型 4
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 GetObiectContext.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. 103
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 当事务中的次要对象返回错误时要小心;可能会获得形如 129
“Method~of Object Failed~”的错误信息,而不是所指 129
定的在错误传播之前返回的丰富错误信息 129
3.9.4使用ObjectConstruct字符串 129
3.9.5 在COM+应用程序中进行进程内调用时执行声明性安全校验 130
3.9.6在COM+中刷新组件命令不再是必需的 131
3.9.7在安装Windows 2000以前版本的计算机上,COM+导出的 131
客户安装程序需要Microsoft Installer(MSI) 131
3.10规则3-10:编写运行于MTS和COM+中的代码的实践技巧 132
3.10.1 创建对象时坚持使用GetObjectContext.CreateInstance 132
3.10.2使用可编程控制的安全措施对访问权限进行校验,而不要 132
依赖于声明性安全措施 132
而不是SetAbort 133
3.10.4不要无意中将DLL安装到用户计算机上 133
3.10.3事务性方法调用失败时,在次要对象中最好使用DisableCommit 133
3.10.5坚持使用ObjectContext接口 134
3.10.6分发对象引用时继续使用SafeRef 134
第4章Web和VB 135
4.1规则4-1:理解IIS体系结构 135
4.1.1IIS的内部结构 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规则4-4:理解DCOM和HTTP的区别 155
4.4.1使用RPC和DCOM进行通信 155
4.4.2使用HTTP通信 156
4.4.3在分布式应用程序中不使用ASP 157
4.4.4使用HTTP的不利方面 159
4.5.1创建默认接口 160
4.5 规则4-5:为脚本环境(如ASP)编写COM组件 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.5直接访问ASP内置对象的好处 171
4.6.4 在VB中如何访问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.5XSLT的缺点 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