书评:C++网络编程,卷2 by Matthew Wilson
Title: C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks
Authors: Douglas C. Schmidt and Stephen D. Huston
Publisher: Addison Wesley Professional, 2002
Pages: 384
Price: $39.99
中文版
书名:《C++网络编程:基于ACE和框架的系统化复用》
译者:马维达 http://www.flyingdonkey.com/
出版社:华中科技大学出版社
出版时间:待定(已完稿)
价格:待定
由Douglas Schmidt和Stephen Huston撰写的C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks,是他们的C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns的续篇。卷1聚焦于将低级的、特定OS的网络原语封装和抽象进ACE OS适配层和C++ wrapper facade(包装外观)中。卷2建构于这一基础之上,所处理的是框架的各种要点,以及怎样将ACE用于系统实现——这是通过增强并扩展卷1介绍的日志服务示例来完成的。
第1章充当了全书、以及ACE所采用的模式/框架方法的引论。本章的进展艰难而缓慢,直到两位作者开始讨论一些细节问题;我的精神上的迷雾因此而升起来,我已经等不及要读第3章。
第2章通过全面地涵盖服务、服务器,以及配置的某些细节问题,继续引介一些基础性的概念。服务被表征为持续时间短的 vs. 持续时间长的、内部的 vs. 外部的、有状态的 vs. 无状态的、分层的 vs. 整体式的。作者给予了服务器与配置以类似的深入论述。本章的进展也有一点艰难,然而却也有趣而有用。
从第3章往后是本书的实际内容部分,涵盖了ACE中的各种框架。从这时起,我开始感觉到真正的兴趣。每一个框架——包括Reactor(反应器)、Service Configurator(服务配置器)、Task(任务)、Acceptor-Connector(接受器-连接器),以及Proactor(前摄器)——都得到了全面的论述,并且结合了真实世界中需要解决的问题、框架的设计,以及对可移植性和效率所带来的必要约束或短处的确认。
最好的一章是最后一章:关于ACE Streams框架的第9章。通过演示怎样利用ACE_Task、ACE_Module和ACE_Stream类、将重要的功能集成进系统中,本章展示了ACE的效用和力量。这是强大、几乎plug-and-play的网络技术,有助于回答我们所可能有的任何疑问,比如:是否要投入并非微不足道的精力来学习ACE。
在讨论各种OS时,两位作者并无偏袒,这让我觉得愉悦和新鲜(在这个问题上,对Timer类、select(),以及ACE_WFMO_Reactor类的描述特别有趣)。再联系到他们在实现ACE及对其进行描述时所采取的注重实效的方法,这样的公正具有极大的吸引力,并且表明了作者的信心:他们的确创造了一种高质量、且不依赖于平台的解决方案。
总的来讲(尽管并非全部),本书的风格很好。作者大量使用了UML,这促进了本书的连贯性(尽管这也使得我多次冲向我的书架)。而在缺点方面,字体似乎太大了,特别是在图中,以及所摘录的代码中;这是我第一次读到这样一本书,它好像是从许多裂缝中“爆发”出来的。尽管作者(或是他们的编辑)勉力使代码不跨页,我还是希望能得到更多的东西(当然,书籍不可能像1600 * 1200的屏幕一样,但如果使用较小的字体,就可以排印出更多的代码。)
在书中有相当多(61)的副栏(Sidebar),它们提供了让人愉悦的、小小的信息片段。但是,这也有一点让人分心。因为它们有那么多,并且比正文更容易阅读,它们太容易让人把思路给丢掉了。哦,你最好喜欢和reify(使……具体化)这个词呆在一起,因为我从未见过哪本书里面有这么多reify。
书中各章还有一个毛病,它们总是在反复地强调本书的一个基本观点,即复用是好的,ACE推动了复用。这没有必要,因为前两章已经清楚地表达了这一观点。
索引很好,参考文献让人印象深刻;我的书籍“Wish List”的大小因此而翻了一番。而术语表非常的好。所有的书籍都应该有这样的术语表!
很奇怪,尽管本书是由Addison-Wesley出版的,书中有一些图表的绘制很差。比如说,方框和方框间的线段刚刚能让人辨认出来。而且,还有一些制作上的错误:比如以“ACE_Service_uscoreHandler”开头的副栏标题,应该是“ACE_Service_Handler”。但愿我所拥有的只是赠阅版,而你的书不会有类似的问题。
总的来说,要想不对本书留下深刻印象是不可能的(如果这不是过誉的话)。我发现自己马上有了一种强烈的愿望,想要更多地(重新)阅读关于模式的书籍资料(更不用说在参考文献中的那些宝贵财富),并且想要冲出去使用ACE开始开发一个分布式项目。我期望着能够在真实的环境中检验ACE所声称的:在生产率上获得极大的收益,而又不牺牲灵活性和(特别是)效率。引用第1章的总结中的话:“持续的重新发现和发明……使得代价……太长久以来一直居高不下”。
我想要说,对于任何想要掌握分布式网络编程的人来说,本书以及卷1都是有用的——无论他们最终是否使用ACE都是如此。(而如果ACE的声称有一半是真的,我认为ACE就应该是首选的开发库,特别是在面向多种硬件平台的情况下)。它不是一本初学者书籍,也并非特别容易阅读(与Meyers/Sutter/Dewhurst的易于消化的风格非常不同),但它信息丰富、有趣,并且没有给人以遗漏了任何重要内容的印象。但是,它好像的确依赖于大量预备知识,特别是关于模式方法的知识,所以,首先阅读Design Pattern[1]和Pattern-Oriented Software Architecture[2]将会是聪明之举。
附注
[1] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns (Addison-Wesley, 1995).
[2] Douglas C. Schmidt. Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects (John Wiley & Sons, 2000).
关于作者
Matthew Wilson holds a degree in Information Technology and a PhD in Electrical Engineering and is a software development consultant for Synesis Software. Matthew's work interests are in writting bullet-proof real-time, GUI, and software-analysis software in C, C++, and Java. He has been working with C++ for over 10 years and is currently bringing STLSoft.org and its offshoots into the public domain. Matthew can be contacted via matthew@synesis.com.au.