.Net组件程序设计(第2版)
基本信息
- 原书名: Programming .NET Components, 2nd Edition
- 原出版社: O'Reilly
编辑推荐
O’Reilly微软技术系列旗舰之作,Amazon 五星名著
全面覆盖.NET 2.0,深刻剖析.NET内部原理和设计技巧
.NET软件架构师的卓越之道,.NET组件程序设计从这里开始……
内容简介回到顶部↑
本书主要介绍了设计和开发基于组件的.net应用程序所需要的技术及相关主题,说明了.net组件程序设计的起源和它对以往技术缺陷所作的改进。本书还利用大量的代码示例、使用技巧、开发警示、设计准则和富有创意的实用工具,向读者介绍如何运用.net框架编写可复用、可维护和健壮的组件。通过此书,读者还能了解到组件技术在.net平台上的实现和应用,以及如何在几种设计和编程模型中选择最佳方案。全书内容翔实,示例丰富,是近年来组件程序设计方面不可多得的佳作。
本书适合.net开发人员、软件架构师和项目管理人员阅读。...
本书适合.net开发人员、软件架构师和项目管理人员阅读。...
作译者回到顶部↑
本书提供作译者介绍
Juval Lowy是IDesign(一家专注于.NET咨询和培训的公司)的首席软件架构师。同时作为微软开发社区的知名专家,鉴于他在.NET解决方案设计及移植过程中的杰出贡献,微软公司授予其“软件英杰(Softwarc Legend)”的荣誉称号。...
.. << 查看详细
.. << 查看详细
目录回到顶部↑
前言.
第1章:面向组件编程简介
基本术语
面向组件和面向对象编程的比较
面向组件编程的原则
.net对于组件原则的遵循
.net组件开发
第2章:.net面向组件的编程要素
语言独立性:公共语言运行时
打包和部署:程序集
二进制兼容性
第3章:基于接口编程
接口和实现分离
使用接口
接口和泛型
设计和分解接口
visual studio 2005中的接口
第4章:生命周期管理
托管堆
传统内存释放模式
第1章:面向组件编程简介
基本术语
面向组件和面向对象编程的比较
面向组件编程的原则
.net对于组件原则的遵循
.net组件开发
第2章:.net面向组件的编程要素
语言独立性:公共语言运行时
打包和部署:程序集
二进制兼容性
第3章:基于接口编程
接口和实现分离
使用接口
接口和泛型
设计和分解接口
visual studio 2005中的接口
第4章:生命周期管理
托管堆
传统内存释放模式
译者序回到顶部↑
译者序
迟到的经典
初识Juval Lowy,是在2004年,我正在《程序员》杂志做技术编辑。因为当时博文视点打算从O’Reilly引进一批经典书籍,Programing .NET Components正在其中。阅读完此书的第一版后,从来没有做过翻译工作的我突然有一种不可抑止的冲动——我真的非常想翻译这本书,这种冲动让我突觉惊讶。而我的良师益友孟岩先生恰恰是那批书籍的技术审校,他也答应我如果有可能,会将本书的翻译工作交给我来做。后来由于种种原因,本书的第一版没有如愿引进,可我却记住了Juval Lowy。在我有限的阅读中,这本书是我见到的在.NET领域关于组件设计水平最高的书。同样的,Juval Lowy也是我最推崇的技术专家之一,就如大多数人对于Martin Fowler在企业架构和软件工程领域的推崇那般,撇开本书不谈,作者的另外一本书COM and .NET Component Services也是经典之作。
之后,我离开了杂志社,进入一家互联网公司工作,也才意识到这本书对我带来了怎样的影响。在过去的两年时间内,不论是我主持开发的项目,还是给别人提供技术咨询的项目,Juval Lowy对于.NET架构深刻而精辟的见解已经成为了我工作中的“圣经”。我知道,这样的形容有点言过其实,见解也有些偏颇,而作为本书的译者,希望我的这些言语不会影响你对于本书的判断。
在过去的7年时间,从最早的.NET概念到.NET 1.0、.NET 1.1、.NET 2.0,再到最近发布的.NET 3.0,.NET世界发生了太大的变化。有时候开发人员会觉得很幸福,因为我们发现软件开发越来越简单。与此同时,又会觉得很痛苦,因为变化的速度甚至超过了我们学习和理解的速度。这个世界没有永恒的东西,唯有变化,就如变化的世界,变化的软件产业,当然也包括变化的.NET。
本书的第2版相对于第1版,也与时俱进,做了一些调整,加入了一些新的内容。而国内和国外的技术界存在一个时间差,大多数人的看法是两年,而本书在美国是2005年出版的,中文版也只有在2007年跚跚来迟了。我想2007年对于国内技术界来说是一个广泛采纳.NET 2.0的一年,也正因为如此,希望本书能够帮助你解决一些困扰许久的问题。
如果你是初级.NET开发人员,那么我建议你先掌握一些.NET的基础知识之后再阅读本书。
如果你是中级.NET开发人员,那么我强烈建议你用心阅读本书,你会进入一个更加宽广的世界。
如果你是高级.NET开发人员,那么我还是有足够的理由建议你阅读本书,因为其中的许多.NET内部原理和设计技巧依旧是值得我们学习的。
如果你是Java架构师,那么也不应该错过本书,因为Juval Lowy关于组件和接口编程的思想同样适用于Java世界。
感谢出版社的周筠老师引进了本书的第2版,更加感谢她给了我这个机会完成心中的梦想,翻译了此书。感谢梁晶编辑和何艳编辑,也感谢本书的审校曹严明先生。因为个人水平有限,翻译难免出错,也希望拿到本书的读者阅读完此书能够给我一个中肯的批评和建议。
最后,感谢我的母亲,是她教会了我如何感恩。
刘如鸿
迟到的经典
初识Juval Lowy,是在2004年,我正在《程序员》杂志做技术编辑。因为当时博文视点打算从O’Reilly引进一批经典书籍,Programing .NET Components正在其中。阅读完此书的第一版后,从来没有做过翻译工作的我突然有一种不可抑止的冲动——我真的非常想翻译这本书,这种冲动让我突觉惊讶。而我的良师益友孟岩先生恰恰是那批书籍的技术审校,他也答应我如果有可能,会将本书的翻译工作交给我来做。后来由于种种原因,本书的第一版没有如愿引进,可我却记住了Juval Lowy。在我有限的阅读中,这本书是我见到的在.NET领域关于组件设计水平最高的书。同样的,Juval Lowy也是我最推崇的技术专家之一,就如大多数人对于Martin Fowler在企业架构和软件工程领域的推崇那般,撇开本书不谈,作者的另外一本书COM and .NET Component Services也是经典之作。
之后,我离开了杂志社,进入一家互联网公司工作,也才意识到这本书对我带来了怎样的影响。在过去的两年时间内,不论是我主持开发的项目,还是给别人提供技术咨询的项目,Juval Lowy对于.NET架构深刻而精辟的见解已经成为了我工作中的“圣经”。我知道,这样的形容有点言过其实,见解也有些偏颇,而作为本书的译者,希望我的这些言语不会影响你对于本书的判断。
在过去的7年时间,从最早的.NET概念到.NET 1.0、.NET 1.1、.NET 2.0,再到最近发布的.NET 3.0,.NET世界发生了太大的变化。有时候开发人员会觉得很幸福,因为我们发现软件开发越来越简单。与此同时,又会觉得很痛苦,因为变化的速度甚至超过了我们学习和理解的速度。这个世界没有永恒的东西,唯有变化,就如变化的世界,变化的软件产业,当然也包括变化的.NET。
本书的第2版相对于第1版,也与时俱进,做了一些调整,加入了一些新的内容。而国内和国外的技术界存在一个时间差,大多数人的看法是两年,而本书在美国是2005年出版的,中文版也只有在2007年跚跚来迟了。我想2007年对于国内技术界来说是一个广泛采纳.NET 2.0的一年,也正因为如此,希望本书能够帮助你解决一些困扰许久的问题。
如果你是初级.NET开发人员,那么我建议你先掌握一些.NET的基础知识之后再阅读本书。
如果你是中级.NET开发人员,那么我强烈建议你用心阅读本书,你会进入一个更加宽广的世界。
如果你是高级.NET开发人员,那么我还是有足够的理由建议你阅读本书,因为其中的许多.NET内部原理和设计技巧依旧是值得我们学习的。
如果你是Java架构师,那么也不应该错过本书,因为Juval Lowy关于组件和接口编程的思想同样适用于Java世界。
感谢出版社的周筠老师引进了本书的第2版,更加感谢她给了我这个机会完成心中的梦想,翻译了此书。感谢梁晶编辑和何艳编辑,也感谢本书的审校曹严明先生。因为个人水平有限,翻译难免出错,也希望拿到本书的读者阅读完此书能够给我一个中肯的批评和建议。
最后,感谢我的母亲,是她教会了我如何感恩。
刘如鸿
前言回到顶部↑
我很荣幸能够在职业生涯中经历了几代Microsoft组件技术的变迁。20世纪90年代中期我开发过DLL,提供导出函数以供使用,并通过MFC扩展DLL来公开类。我亲身体验过管理之间存在互操作的一组应用程序(由156个DLL构成,而且要作为一个单元来部署)是多么复杂,也经历过由于这些DLL使用序数而带来的版本控制和维护问题。我帮助设计了类似COM的方案来解决那些问题,并依然记得当我第一次听说COM和我使用命令行工具生成第一个GUID的情形。.
在ATL远未问世之前我就学会了如何编写类工厂和IDL接口程序,我还在RPC被DCOM替代之前,就使用过RPC。我使用COM设计过基于组件的应用程序,并且体会过与不熟悉必要的COM知识的开发人员分享设计思路有多难。我使用过MTS编写程序,并且在此过程中学会了一些权宜之计。当用COM+来架构大规模企业框架时,我惊叹COM+所展现出的优雅和实用。
随着面向组件技术的不断发展与演进,我对面向组件技术的理解与认识也不断深入。我经常自问:使用组件的基本原则是什么?它们与传统面向对象编程的区别何在?我努力从以往所犯的错误中学习新的东西,提取平时遇到的和自己领悟到的各种好的想法和技术,并推而广之。我相信自己已经界定出一些面向组件设计中的核心原则,这些原则超越了今天可用的所有技术,并且从长远来看,它们能够构造出更易于复用、扩展和维护的组件。
随着.NET框架的出现,Windows开发人员终于拥有了一种卓越的技术,能够简化基于组件的应用程序的开发和部署工作。.NET是微软公司呕心沥血之作,在我看来它很好地改善了以往的相关技术尤其是COM的不足之处。它融合并加强了已经被证明了的诸多技术和方法,同时保留了这些技术中的核心优势。
对我而言,根本上讲.NET是一种组件技术,它为生成二进制组件提供了简单便捷的方法,而且符合那些我认为非常合理的设计原则。.NET是全新设计的,旨在简化组件的开发和部署,并支持各种编程语言间的互操作。.NET的应用范围广泛,其组件可以用于创建多种多样的基于组件的应用程序,既包括独立的桌面应用程序,也包括基于Web的应用程序和服务。
当然,.NET不仅仅是一种组件技术,事实上它是一整套技术的总称。
提示:本书中,“.NET”这个术语既用来泛指.NET框架,也用于具体指该框架所体现的组件技术。
.NET提供了许多专门的应用程序框架,其中包括用于富Windows客户端的Windows Forms,用于数据访问的ADO.NET,用于Web应用的ASP.NET,用于公开和使用远程服务(这些服务使用SOAP和其他基于XML的协议)的Web Services。Visual Studio 2005支持使用C#、Visual Basic、托管C++(Managed C++)和J#来开发.NET应用程序,除此之外也可以使用其他语言。你能够在Windows或SQL Server 2005中宿主.NET。微软服务器产品会在未来几年里越来越多地支持与.NET连接(.NET Connected)的应用程序,Windows的未来版本也将主要建立在.NET的基础上。
本书范围
Scope of This Book
本书涵盖了设计、开发基于组件的.NET应用程序所需要的技术及相关主题。不过为了充分理解.NET,本书还介绍了其起源以及它对以往技术缺陷作了哪些改进。除了向读者展示如何执行某些任务外,本书还会经常通过面向组件程序设计的原则阐释这些任务背后的基本原理。熟识了这些理念后,你就能在可维护性、可扩展性、可复用性以及性能方面最大限度地优化你的应用程序设计。即使没有COM的相关知识也能阅读本书,但我在解释.NET的运作原理时还是会偶尔使用COM作为参考。
通过本书你不仅可以学习.NET组件编程及相关系统的问题,还可以了解相关的设计选择、技巧、最佳操作实践以及一些陷阱。本书回避了许多.NET实现细节,而把主要篇幅集中在将.NET作为一种组件技术的可能性和实际操作上:例如怎样使用该技术,怎样在可供选择的设计和编程模型中选出最佳方案。此外,本书还包含了许多有用的实用程序、工具和自 .NET 问世5年以来我所开发出来的帮助类,所有这些都是为了提高生产效率和所开
发的.NET组件的质量。阅读完本书后,你就能够充分利用.NET开发基础架构和应用框架,立即动手开发自己的.NET组件。本书包含了设计、开发基于组件的.NET应用程序所需要的技术及相关主题。本书对.NET 1.1和.NET 2.0作了详尽的解释。
下面简要介绍一下本书的主要章节和附录。
第1章,面向组件编程简介
本章提供本书中使用的基本术语。对比了面向对象编程和面向组件编程的差异,然后列举面向组件编程的一些原则。这些原则解释了如何使用.NET背后的真正原理,理解它们是正确构建基于组件的应用程序的一个先决条件。
第2章,.NET面向组件编程基础
本章描述了.NET的基础,如公共语言运行时(CLR)、.NET编程语言、代码生成过程、程序集及其构建和组合。结尾将解释.NET如何维护客户方和组件之间的二进制兼容性,并讨论了这种编程模型方案的本质。如果你已经熟悉了 .NET 框架的基础知识(1.1版和2.0版),可只随意地浏览一下本章,甚至完全跳过它。
第3章,基于接口编程
本章阐述基于接口的工作方式。解释如何将接口与其.NET实现分离开来,如何实现接口,以及如何设计和构造接口来满足可重用性、可维护性和可扩展性。
在ATL远未问世之前我就学会了如何编写类工厂和IDL接口程序,我还在RPC被DCOM替代之前,就使用过RPC。我使用COM设计过基于组件的应用程序,并且体会过与不熟悉必要的COM知识的开发人员分享设计思路有多难。我使用过MTS编写程序,并且在此过程中学会了一些权宜之计。当用COM+来架构大规模企业框架时,我惊叹COM+所展现出的优雅和实用。
随着面向组件技术的不断发展与演进,我对面向组件技术的理解与认识也不断深入。我经常自问:使用组件的基本原则是什么?它们与传统面向对象编程的区别何在?我努力从以往所犯的错误中学习新的东西,提取平时遇到的和自己领悟到的各种好的想法和技术,并推而广之。我相信自己已经界定出一些面向组件设计中的核心原则,这些原则超越了今天可用的所有技术,并且从长远来看,它们能够构造出更易于复用、扩展和维护的组件。
随着.NET框架的出现,Windows开发人员终于拥有了一种卓越的技术,能够简化基于组件的应用程序的开发和部署工作。.NET是微软公司呕心沥血之作,在我看来它很好地改善了以往的相关技术尤其是COM的不足之处。它融合并加强了已经被证明了的诸多技术和方法,同时保留了这些技术中的核心优势。
对我而言,根本上讲.NET是一种组件技术,它为生成二进制组件提供了简单便捷的方法,而且符合那些我认为非常合理的设计原则。.NET是全新设计的,旨在简化组件的开发和部署,并支持各种编程语言间的互操作。.NET的应用范围广泛,其组件可以用于创建多种多样的基于组件的应用程序,既包括独立的桌面应用程序,也包括基于Web的应用程序和服务。
当然,.NET不仅仅是一种组件技术,事实上它是一整套技术的总称。
提示:本书中,“.NET”这个术语既用来泛指.NET框架,也用于具体指该框架所体现的组件技术。
.NET提供了许多专门的应用程序框架,其中包括用于富Windows客户端的Windows Forms,用于数据访问的ADO.NET,用于Web应用的ASP.NET,用于公开和使用远程服务(这些服务使用SOAP和其他基于XML的协议)的Web Services。Visual Studio 2005支持使用C#、Visual Basic、托管C++(Managed C++)和J#来开发.NET应用程序,除此之外也可以使用其他语言。你能够在Windows或SQL Server 2005中宿主.NET。微软服务器产品会在未来几年里越来越多地支持与.NET连接(.NET Connected)的应用程序,Windows的未来版本也将主要建立在.NET的基础上。
本书范围
Scope of This Book
本书涵盖了设计、开发基于组件的.NET应用程序所需要的技术及相关主题。不过为了充分理解.NET,本书还介绍了其起源以及它对以往技术缺陷作了哪些改进。除了向读者展示如何执行某些任务外,本书还会经常通过面向组件程序设计的原则阐释这些任务背后的基本原理。熟识了这些理念后,你就能在可维护性、可扩展性、可复用性以及性能方面最大限度地优化你的应用程序设计。即使没有COM的相关知识也能阅读本书,但我在解释.NET的运作原理时还是会偶尔使用COM作为参考。
通过本书你不仅可以学习.NET组件编程及相关系统的问题,还可以了解相关的设计选择、技巧、最佳操作实践以及一些陷阱。本书回避了许多.NET实现细节,而把主要篇幅集中在将.NET作为一种组件技术的可能性和实际操作上:例如怎样使用该技术,怎样在可供选择的设计和编程模型中选出最佳方案。此外,本书还包含了许多有用的实用程序、工具和自 .NET 问世5年以来我所开发出来的帮助类,所有这些都是为了提高生产效率和所开
发的.NET组件的质量。阅读完本书后,你就能够充分利用.NET开发基础架构和应用框架,立即动手开发自己的.NET组件。本书包含了设计、开发基于组件的.NET应用程序所需要的技术及相关主题。本书对.NET 1.1和.NET 2.0作了详尽的解释。
下面简要介绍一下本书的主要章节和附录。
第1章,面向组件编程简介
本章提供本书中使用的基本术语。对比了面向对象编程和面向组件编程的差异,然后列举面向组件编程的一些原则。这些原则解释了如何使用.NET背后的真正原理,理解它们是正确构建基于组件的应用程序的一个先决条件。
第2章,.NET面向组件编程基础
本章描述了.NET的基础,如公共语言运行时(CLR)、.NET编程语言、代码生成过程、程序集及其构建和组合。结尾将解释.NET如何维护客户方和组件之间的二进制兼容性,并讨论了这种编程模型方案的本质。如果你已经熟悉了 .NET 框架的基础知识(1.1版和2.0版),可只随意地浏览一下本章,甚至完全跳过它。
第3章,基于接口编程
本章阐述基于接口的工作方式。解释如何将接口与其.NET实现分离开来,如何实现接口,以及如何设计和构造接口来满足可重用性、可维护性和可扩展性。
序言回到顶部↑
推荐序一.
虽然现在毕业的软件设计方面的人才在逐年增多,但是独立软件开发商和系统集成商的技术主管们仍在抱怨找不到合适的软件工程师。原因在于我们的大学计算机教育基本上是与市场需求脱节的,这早已是个共识。有一个数据可以说明这点,2006年的一个统计表明,在我们的大学计算机课程里,90%的课程使用的是Windows操作系统,50%的课程作业是用C/C++完成的,而从全球来看,这两个数字分别是74%和26%。我们的大学教育重理论而轻实践,结果学生们在软件设计和软件工程方面学到的仅仅是一堆毫无感觉的原则性的文字。随便找一位工作了一两年的软件工程师进行调查,如果你问他什么是面向对象编程(object-oriented programming),10个中有8个给不出比较完整的答案。如果你再问他什么是面向组件编程(component-oriented programming),10个中有9个答不上来;如果你进一步问他什么是面向方面编程(aspect-oriented programming),或什么是面向服务编程(service-oriented programming),我想10个会有10个答不上来。
出现这种情况的一个重要原因就是,似乎现在大家都认为软件开发是一件很容易的事情。有那么多工具,那么多现成的组件库,网上还有大把大把免费的、开源的系统软件和应用软件,你拿来装上,再在开发工具里用鼠标拖拖拽拽,一个应用不就开发出来了吗?哦,你以前没有用过这种数据库软件?没问题,书店里到处都是《21天精通XXX编程》。买一本来看几天,咱中国人比美国人聪明,人家要21天才精通,咱们7天就精通!
当然,真正从事过多年软件开发的软件工程师不会这么天真。软件的复杂度是那些非软件行业的人所无法理解的。看看从事软件行业的是些什么样的人你就清楚了。你把他们的平均智商跟其他行业人的平均智商比一比,再把他们每天的平均工作时间跟其他行业人的平均工作时间比一比,你就知道开发一种软件是件多么不容易的事情。
我向软件工程师们致敬。他们是一群孜孜不倦、追求知识、追求卓越的人。由于大学教育的失败以及软件产业本身快速创新的缘故,他们必须在工作中自学,不断地更新、提高自己的能力。好的书籍对他们来说就非常关键了。一本好的技术书不是某个软件的帮助文档。帮助文档会罗列出所有的接口、函数、对象以及其他一切细节,让你一下子找不着北,“只见树木不见森林”,看了一大堆东西仍然一头雾水。好书会给你一个大局观,有哪几大部分,各部分的关系是什么,每个部分的主要元素是什么。你抓住了主要矛盾,弄懂了核心概念和关键点,对技术的掌握就会有一种了然于心的感觉。
好的技术书却也不是一种速成诀窍,速成诀窍只告诉你完成某件事情须做的一、二、三、四步,而你并不明白为什么要这么做。况且在软件工程中,大多数功能都可以用多种方案实现。没有绝对最好的方案,只有最合适的方案——基于系统当前的需求,找到一种最佳的平衡,可能是性能、可维护性、可扩展性、伸缩性、跨平台、安全性、界面友好性等各方面的权衡与折中。好书可以告诉你各种可能的选择和它们的优缺点以及不同的适用场景。
您手中的《.NET组件程序设计》就是这样一本优秀的技术书。很高兴看到它的中文版终于出版了,这对那些希望真正了解和掌握.NET Framework编程的软件工程师们是一个福音。但这不是一本.NET入门,您需要有一些.NET Framework编程经验。本书最合适那些希望从一名普通的.NET编程人员走向.NET软件架构师的读者阅读。
本书以.NET Framework 2.0为主讲解.NET下的组件程序设计技术,覆盖了接口设计、远程机制、异步调用、拦截机制、事件机制、多线程、持久化、生命周期管理、版本管理、安全机制等主题。虽然反射机制和属性编程被放在附录C中,但是我认为它们作为.NET Framework核心的组件技术,应该受到读者的重视。作者在此着墨不多,希望深入了解的读者可以参照其他的技术资源进行学习。同样的,附录D中的泛型技术对组件编程中非常重要的复用原则的运用是十分关键的,希望读者能够很好地理解。
从组件编程技术的角度来认识和了解.NET Framework,您会发现它是一个非常先进的技术平台。不论您是想通过读这本书来更好地设计.NET程序,还是想了解如何设计一个好的编程框架,或者您是一位软件架构师,希望评估.NET Framework作为组件技术平台的能力,这本书都会给您一个满意的答案。..
曹严明
2007年1月
推荐序二
7年前,在我申请踏入软件行业的第一个岗位时,面试官问了我一个问题:懂COM和COM+吗?那时候我仅仅知道有COM+这个东西罢了,但却从此开始了面向组件的开发之旅。那时还是用C++,搭配初学者难以掌握的ATL 框架来开发COM组件。
在组件黑盒复用和单一职责原则的指引下,似乎大多数事情比较清晰,开发的时候可以齐头并进,新员工加入时,也不至于手忙脚乱。
其实,Perl/Python的“工具箱+黏合剂”工作模式,大抵也是这种思路。
在以后的岁月中,我们总是喜欢像搭积木一样地搭建平台,并引入各种语言构建的组件或进程,但尽量减少耦合。
后来,.NET提供了一个完整的、卓越的组件开发基础架构,让原本就很清晰的开发思路变得更容易实现。
看过本书的前几章之后,就觉得它真是字字珠玑。当然,译者深厚的技术功底和文字功底也保证了它的品质。作者也继承了微软面向组件开发的清晰易用的传统,把故事讲得深入浅出。
虽然现在毕业的软件设计方面的人才在逐年增多,但是独立软件开发商和系统集成商的技术主管们仍在抱怨找不到合适的软件工程师。原因在于我们的大学计算机教育基本上是与市场需求脱节的,这早已是个共识。有一个数据可以说明这点,2006年的一个统计表明,在我们的大学计算机课程里,90%的课程使用的是Windows操作系统,50%的课程作业是用C/C++完成的,而从全球来看,这两个数字分别是74%和26%。我们的大学教育重理论而轻实践,结果学生们在软件设计和软件工程方面学到的仅仅是一堆毫无感觉的原则性的文字。随便找一位工作了一两年的软件工程师进行调查,如果你问他什么是面向对象编程(object-oriented programming),10个中有8个给不出比较完整的答案。如果你再问他什么是面向组件编程(component-oriented programming),10个中有9个答不上来;如果你进一步问他什么是面向方面编程(aspect-oriented programming),或什么是面向服务编程(service-oriented programming),我想10个会有10个答不上来。
出现这种情况的一个重要原因就是,似乎现在大家都认为软件开发是一件很容易的事情。有那么多工具,那么多现成的组件库,网上还有大把大把免费的、开源的系统软件和应用软件,你拿来装上,再在开发工具里用鼠标拖拖拽拽,一个应用不就开发出来了吗?哦,你以前没有用过这种数据库软件?没问题,书店里到处都是《21天精通XXX编程》。买一本来看几天,咱中国人比美国人聪明,人家要21天才精通,咱们7天就精通!
当然,真正从事过多年软件开发的软件工程师不会这么天真。软件的复杂度是那些非软件行业的人所无法理解的。看看从事软件行业的是些什么样的人你就清楚了。你把他们的平均智商跟其他行业人的平均智商比一比,再把他们每天的平均工作时间跟其他行业人的平均工作时间比一比,你就知道开发一种软件是件多么不容易的事情。
我向软件工程师们致敬。他们是一群孜孜不倦、追求知识、追求卓越的人。由于大学教育的失败以及软件产业本身快速创新的缘故,他们必须在工作中自学,不断地更新、提高自己的能力。好的书籍对他们来说就非常关键了。一本好的技术书不是某个软件的帮助文档。帮助文档会罗列出所有的接口、函数、对象以及其他一切细节,让你一下子找不着北,“只见树木不见森林”,看了一大堆东西仍然一头雾水。好书会给你一个大局观,有哪几大部分,各部分的关系是什么,每个部分的主要元素是什么。你抓住了主要矛盾,弄懂了核心概念和关键点,对技术的掌握就会有一种了然于心的感觉。
好的技术书却也不是一种速成诀窍,速成诀窍只告诉你完成某件事情须做的一、二、三、四步,而你并不明白为什么要这么做。况且在软件工程中,大多数功能都可以用多种方案实现。没有绝对最好的方案,只有最合适的方案——基于系统当前的需求,找到一种最佳的平衡,可能是性能、可维护性、可扩展性、伸缩性、跨平台、安全性、界面友好性等各方面的权衡与折中。好书可以告诉你各种可能的选择和它们的优缺点以及不同的适用场景。
您手中的《.NET组件程序设计》就是这样一本优秀的技术书。很高兴看到它的中文版终于出版了,这对那些希望真正了解和掌握.NET Framework编程的软件工程师们是一个福音。但这不是一本.NET入门,您需要有一些.NET Framework编程经验。本书最合适那些希望从一名普通的.NET编程人员走向.NET软件架构师的读者阅读。
本书以.NET Framework 2.0为主讲解.NET下的组件程序设计技术,覆盖了接口设计、远程机制、异步调用、拦截机制、事件机制、多线程、持久化、生命周期管理、版本管理、安全机制等主题。虽然反射机制和属性编程被放在附录C中,但是我认为它们作为.NET Framework核心的组件技术,应该受到读者的重视。作者在此着墨不多,希望深入了解的读者可以参照其他的技术资源进行学习。同样的,附录D中的泛型技术对组件编程中非常重要的复用原则的运用是十分关键的,希望读者能够很好地理解。
从组件编程技术的角度来认识和了解.NET Framework,您会发现它是一个非常先进的技术平台。不论您是想通过读这本书来更好地设计.NET程序,还是想了解如何设计一个好的编程框架,或者您是一位软件架构师,希望评估.NET Framework作为组件技术平台的能力,这本书都会给您一个满意的答案。..
曹严明
2007年1月
推荐序二
7年前,在我申请踏入软件行业的第一个岗位时,面试官问了我一个问题:懂COM和COM+吗?那时候我仅仅知道有COM+这个东西罢了,但却从此开始了面向组件的开发之旅。那时还是用C++,搭配初学者难以掌握的ATL 框架来开发COM组件。
在组件黑盒复用和单一职责原则的指引下,似乎大多数事情比较清晰,开发的时候可以齐头并进,新员工加入时,也不至于手忙脚乱。
其实,Perl/Python的“工具箱+黏合剂”工作模式,大抵也是这种思路。
在以后的岁月中,我们总是喜欢像搭积木一样地搭建平台,并引入各种语言构建的组件或进程,但尽量减少耦合。
后来,.NET提供了一个完整的、卓越的组件开发基础架构,让原本就很清晰的开发思路变得更容易实现。
看过本书的前几章之后,就觉得它真是字字珠玑。当然,译者深厚的技术功底和文字功底也保证了它的品质。作者也继承了微软面向组件开发的清晰易用的传统,把故事讲得深入浅出。
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)








点击看大图





加载中...


