具体描述
Designing
Component-Based
Applications
基于组件的应用程序设计
使用经过论证的方法开发可伸缩、
高性能的企业范围的应用程序
这是一本基于COM和MTS的正式参考文档。《基于组件的
应用程序设计》以图例的方式介绍了有效的COM驱动设计
和MTS部署的原则,这些原则都是经过MicrosoftCOM和
MicrosoftVisualStudi0设计小组的合作项目IslandHopper严
格检验过的。使用一套经过多个3-2-1项目顾问亲自测试的
实际开发规则,构建了这个功能全面的企业应用程序。当我
们将重点放在该模型应用程序的每个方面时,您还会了解到
如何应用这种经过论证的方法快速设计、测试、调试及部署
您自己的多层、基于组件的程序。
在《基于组件的应用程序设计》中,您还将发现一些从设计
到部署的明确指导:
MTS技术概述――研究DNA结构,回顾COM的基本原则,
并了解它们是如何一起工作,将前所未有的可伸缩性和灵活
性带人到企业开发中
应用程序设计策略――确定在三层的MTS环境下设计和部署
特定应用程序的挑战;构建数据和商务对象、组件及表示层
准备开始――应用调试、疑难解答及性能验证程序
扩展――使用诸如“Micros0ft消息队列服务器”和COMTI
等工具来扩展MTS应用程序;了解了Microsoft的COM+
分布式计算策略就可以把握您自己的未来
作者简介
目录信息
译者序
致谢
引言
第一部分 技术概览
第一 章 Windows DNA
1.1商业问题,结构化的解决方案
1.1.1应用程序体系结构
1.1.2组件
1.1.3三层模型启用器
1.2Windows DNA的体系结构
1.2.1组件对象模型
1.2.2 表示层
1.2.3商业层
1.2.4数据访问层
小结
第二章 组件对象模型
2.1为什么要采用C0M?
2.2COM编程模型
2.2.1对象
2.2.2接口
2.2.3类
2.2.4组件
2.3分布式COM
2.3.1COM的安全性
2.3.2重新访问注册
2.3.3远程激活和调度
2.4Automation(自动化)
2.4.1IDispatch接口
2.4.2类型库
2.4.3双重接口
小结
第三章 数据访问基础
3.1为什么采用MDAC?
3.2访问数据
3.2.1ODBC
3.2.2万能存储
3.2.3万能数据访问
3.3OLEDB
3.4ActiveX数据对象
3.5远程数据服务
小结
第四章 Microsoft Transaction Server
4.1为什么要使用MTS?
4.2MTS的多种面孔
4.2.1作为ORB的MTS
4.2.2作为COM对象代理的MTS
4.2.3作为TP-Monitor的MTS
4.3应用程序服务器编程模型
4.3.1易用性
4.3.2通过资源共享实现伸缩性
4.3.3规则 1:调用 SetC omplete
4.3.4规则2:获取和独占接口指针
4.3.5规则3:使用和释放资源
4.3.6规则4:使用基于角色的安全性
4.3.7规则5:使用事务
小结
第五章 Active Server Pages
5.1为什么要使用ASP
5.1.1Auto mation组件
5.1.2ASP编程模型
5.2三层式应用程序体系结构
5.3使用MTS进行集成
小结
第六章 扩展MTS 的功能
6.1UNIX上的COM
6.2XA的交互操作性
6.3COM事务集成器
6.3.1COMTI 体系结构
6.3.2创建一个COMTI 自动化组件
6.4Microsoft MessageQueueServer消息队列服务器
6.4.1消息队列
6.4.2使用MSMQ
小结
第二部分 构造应用程序
第七章 应用程序的定义和模型化
7.1创建一个应用程序定义
7.1.1定义商业问题
7.1.2定义功能规范
7.1.3建立应用程序需求
7.2应用程序的模型化
7.2.1持久数据模型化
7.2.2设计类
7.2.3数据对象模型化
7.2.4商业对象模型化
7.2.5表示层模型化
7.3定义物理结构
7.3.1将类分组为组件
7.3.2将组件分组为程序包和进程
7.3.3将程序包和进程指定到机器
7.3.4建立物理结构文档
小结
第八章 构造数据对象
8.1从设计到实现
8.2为MTS实现组件
8.3数据对象技术
8.3.1利用AIDO编程
8.4实现数据对象
8.4.1在V isual Basic中实 现db-Cate goryC
8.4.2在Visual Basic中实现db-CustomerPasswordC
8.4.3快速考察db-CustomerC
8.4.4用VisualC++实现数据对象
小结
第九章 构造商业对象
9.1从设计到实现
9.2为MTS实现组件
9.2.1构造功能
9.2.2管理状态
9.2.3处理错误
9.2.4安全地访问您的组件
9.3构造商业对象
9.3.1在Visual Basic中完成 实现 bus-PaymentC
9.3.2在C++中实现bus-InvoiceC
9.3.3利用SPM实现util-TakeANumber
小结
第十章 包装组件
10.1程序包
10.2设计程序包
10.2.1激活
10.2.2共享资源
10.2.3故障隔离
10.2.4 安全性隔离
10.2.5“IslandHopper”程序包设计
10.3构造程序包
10.3.1创建程序包
10.3.2向程序包中添加组件
10.3.3设置激活属性
10.3.4配置安全性
10.3.5设置事务属性
10.3.6 输出程序包
小结
第十一章 构造表示层
11.1从设计转到实现
11.1.1表示层应用程序的类型
11.1.2选择一种表示层体系结构
11.2实现表示层
11.2.1使用商业对象
11.2.2使用RDS访问远程对象
11.2.3使用数据绑定
11.2.4使用ASP
11.2.5使用客户端组件
11.3实现“IslandHopper”应用程序的表示层
11.3.1设计决策
11.3.2实现Classifieds应用程序
11.3.3实现Internet客户
小结
第十二章 调试和排除故障
12.1组件级测试
12.2本地测试
12.2.1调试MTS组件
12.2.2追踪和确认
12.2.3将错误消息解码
12.2.4检查并排除数据库方面的问题
12.2.5用于排除故障的MTS工具
12.2.6Windows NT事件查看器
12.3测试分布式应用程序
小结
第十三章 性能验证
13.1为什么要进行性能验证?
13.2性能验证的工作过程
13.2.1定义性能需求
13.2.2评估性能
13.2.3找到并消除瓶颈
13.3常见瓶颈
13.3.1SQLServer瓶颈
13.3.2数据访问瓶颈
13.3.3事务瓶颈
13.3.4其他瓶颈
小结
第十四章 部署分布式应用程序
14.1选择拓扑结构
14.1.1集成到公司现有的应用程序中
14.1.2满足性能需要
14.1.3常用部署配置
14.1.4 容错功能
14.2部署过程
14.2.1安装预先建立好的程序包
14.2.2创建客户安装程序
14.2.3最终确定程序包设置
14.2.4 安装客户程序
小结
第三部分 MTS 的未来
第十五章 扩展应用程序
15.1利用C0MTI开发组件
15.1.1使用ComponentBuilder
15.1.2COMTI支持的事务处理程序
15.2利用MSMQ开发应用程序
15.2.1MSMQ应用程序模型
15.2.2编制MSMQ应用程序
15.2.3配置MSMQ应用程序组件
小结
第十六章 COM+
16.1发展中的COM和MTS
16.1.1一种统一的体系结构
16.1.2一种统一的编程模型
16.1.3一种统一的管理模型
16.2针对企业应用程序的新服务
16.2.1对象池
16.2.2对象构造器
16.2.3补偿资源管理器
16.2.4安全性强化
16.2.5队列组件
16.2.6事件
16.2.7内存中的数据库
16.2.8动态负荷平衡
小结
附录 关于3-2-1程序
参考书目
· · · · · · (收起)
读后感
用户评价
这是一部读起来非常“厚重”的书,它需要的不仅仅是技术背景,更需要一种对系统本质的探究欲望。作者的写作风格非常独特,夹杂着一种历史的纵深感,似乎在向读者展示,我们今天所面临的许多架构困境,其实是早期计算机科学思想的延续和演变。书中对“演进式架构”的论述,打破了我过去对“一步到位”的架构蓝图的迷信。它更侧重于如何构建一个能够“自我修复”和“适应变化”的软件结构。其中关于如何设计那些能够在不中断服务的情况下进行底层技术栈迁移的策略,让我受益匪浅。这些内容,在市面上大多数宣扬最新技术栈的读物中是极为罕见的。它教会读者的是一种“延迟决策”的智慧,即在信息不完全明朗之前,保持系统的开放性和可重构性,而不是过早地被当前的需求所锁定。这本书更像是一部战略指南,而非战术手册,它教你如何“打赢长期战争”。
阅读这本书的过程,像是一次与一位经验老到的系统架构师进行的长时间、高强度的对话。作者对于复杂性管理的洞察力,尤其体现在对“状态管理”和“副作用控制”的处理上。他没有简单地推荐哪一种状态管理库,而是深入剖析了在分布式环境中,如何以一种可预测的方式处理数据的不变性和时序性问题。这种对底层原理的执着,使得书中的论述具有极强的生命力,不会因为几年后框架的更新而过时。我特别喜欢书中关于“可观测性”被提升到架构设计核心地位的观点。这不仅仅是添加日志和监控那么简单,而是如何从一开始就将组件的内部行为暴露为一种可被理解和调试的形式。这种前瞻性的设计思维,是我在许多快节奏的开发工作中常常忽略的。总而言之,这本书提供了一种超越日常编码任务的视角,它让你思考的不再是单个功能点的实现,而是整个信息生态系统如何在时间洪流中保持其稳定性和响应能力。
这本书的结构安排极其巧妙,它成功地将理论的严谨性与实践的可操作性完美地融合在一起。我发现,在讲解高级架构决策时,作者总能及时提供一些来自真实世界项目的“反例”分析,这使得读者能够直观地理解某些看似合理的选择,在长期运行中会暴露出何种致命缺陷。我个人对其中关于“关注点分离”的讨论给予了极高的评价。它不仅仅停留在MVC或类似模式的层面,而是探讨了如何将业务规则、用户界面交互和数据持久化这三条截然不同的关注流,在不同的粒度上进行有效隔离。我尤其欣赏作者对“契约设计”的强调,他认为组件之间的通信应当是基于明确且稳定的契约,而非隐性的依赖。这种严谨的态度,让我开始反思我们团队内部模块间协作的随意性。这本书的价值在于,它迫使你停下来,审视你当前项目中的每一个“隐形依赖”,并思考如何将其转化为清晰、可测试、可替换的明确接口。
这本新近出版的关于现代软件架构的力作,给我留下了极其深刻的印象。从我个人的阅读体验来看,作者似乎对整个软件工程领域,尤其是在处理复杂系统时的挑战,有着非常独到和深刻的见解。书中对设计模式的探讨,远超出了教科书式的机械罗列,而是深入到了每种模式背后的哲学思想和适用场景的微妙权衡。我特别欣赏作者在阐述如何在大型项目中保持代码的可维护性和演化能力时所采取的宏观视角。他没有拘泥于特定的编程语言或框架的细节,而是聚焦于那些跨越技术栈的、永恒的设计原则。例如,关于如何通过清晰的边界划分来管理跨职能团队之间的依赖性,书中提供了一套非常实用的思维框架,这对于我目前领导的那个正处于快速扩张期的项目团队来说,简直是雪中送炭。我常常在思考,如何在既保证开发效率的同时,又能抵御“技术债务”的侵蚀,这本书提供了一个非常成熟的应对思路,它强调的不是快速构建,而是“智慧地构建”,这在当今这个追求短期交付的行业环境中,无疑是一种清醒的呼唤。
我对这本书在描述软件演化过程中的“涌现性”概念感到尤为震撼。它并非一本枯燥的技术手册,更像是一部关于软件生命周期的沉思录。作者对于系统随时间推移而必然产生的复杂性,进行了近乎诗意的描绘,并提出了应对这种复杂性的主动策略,而非被动修补。我注意到,书中对“恰当的抽象层次”的把握非常到位,避免了过度设计带来的僵化,同时也警惕了设计不足导致的混乱。比如,在讨论如何平衡全局一致性和局部灵活性时,作者引入了一个我从未在其他地方读到过的比喻——“建筑的榫卯结构”,它形象地说明了组件间接口应具备的韧性和可替换性。这种将工程问题与具象化的艺术或工程学类比的做法,极大地提升了阅读的趣味性和理解的深度。读完特定章节后,我感觉自己对“模块化”的理解上升到了一个全新的层次,不再仅仅是代码的物理分割,而是一种对信息流和职责划分的艺术化控制。这本书无疑是为那些不满足于仅仅“写出能跑的代码”,而是追求“写出能优雅成长的代码”的工程师准备的。