基本信息
- 原书名:Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)
- 原出版社: Addison-Wesley Professional
- 作者: (美)Krzysztof Cwalina Brad Abrams
- 译者: 葛子昂
- 丛书名: 图灵程序设计丛书 C#与.NET系列
- 出版社:人民邮电出版社
- ISBN:9787115226518
- 上架时间:2010-5-14
- 出版日期:2010 年5月
- 开本:16开
- 页码:370
- 版次:2-1
- 所属分类:计算机 > 软件与程序设计 > .NET > 综合
编辑推荐
微软.NET Framework设计组的智慧结晶
洞悉.NET技术内幕
.NET开发者的必备图书
内容简介
计算机书籍
数千名微软精锐开发人员的经验和智慧,最终浓缩在这本设计规范之中。与上一版相比,书中新增了许多评注,解释了相应规范的背景和历史,从中你能聆听到微软技术大师Anders Hejlsberg、Jeffrey Richter和Paul Vick等的声音,读来令人兴味盎然。
本书虽然是针对.NET平台上的框架设计的,但对其他平台的框架设计同样具有借鉴意义。新版根据.NET Framework 3.0和3.5的新特性做了全面更新,主要关注的是直接影响框架可编程能力的设计问题。遵守这些规范对于使用.NET Framework创建高质量的应用程序至关重要。
本书提供配套光盘,内含Designing .NET Class Libraries等13个演讲视频。此外,光盘还包括.NET Framework类和组件设计指南、API规范样例以及其他有用的资源和工具。
作译者
Brad Abrams 微软公司CLR开发组和.NET Framework开发组的创始人之一,目前是项目经理主管。他参与制定了CLS、.NET Framework设计规范以及ECMA/ISO CLI标准中程序库标准,著有Programming in the .NET Environment、.NET Framework Standard Libary Annotated Reference(卷1和卷2)等书。读者可以从他的博客http://blogs.msdn.com/bradA/中了解他的最新想法。
葛子昂,毕业于南京理工大学计算机系,现任微软中国研发集团服务器及开发工具事业部的软件开发主管,目前正从事Windows Workflow Foundation(WF)的相关开发,致力于为WF开发人员提供方便高效的开发工具。之前曾长期从事Windows Communication Foundation(WCF)产品的相关研发。加入微软前先后任职于育碧电脑软件有限公司和旭上电子有限公司,从事计算机游戏及图形处理器的开发,具有丰富的开发经验。出版有译作《.NET设计规范》、《Windows核心编程(第5版)》、《设计模式沉思录》。
目录
1.1 精心设计的框架所具备的品质 2
1.1.1 精心设计的框架是简单的 2
1.1.2 精心设计的框架设计代价高 3
1.1.3 精心设计的框架充满利弊权衡 4
1.1.4 精心设计的框架应该借鉴过去的经验 4
1.1.5 精心设计的框架要考虑未来发展 4
1.1.6 精心设计的框架应具有良好的集成性 5
1.1.7 精心设计的框架是一致的 5
第2章 框架设计基础 7
2.1 渐进框架 9
2.2 框架设计的基本原则 12
2.2.1 围绕场景进行设计的原则 12
2.2.2 低门槛原则 18
2.2.3 自说明对象模型原则 22
2.2.4 分层架构原则 28
2.3 小结 30
第3章 命名规范 31
3.1 大小写约定 31
3.1.1 标识符的大小写规则 32
译者序
本书保留了第一版中的大部分内容,对原有内容进行了适当的更新。这充分证明了书中的设计规范是经得起时间考验的,而这也正是它的核心价值所在。除此之外,本书还增加了许多新的内容,包括序列化、LINQ、依赖属性等等,从而涵盖了.NET Framework 3.0和.NET Framework 3.5中的核心特性。
在过去的四年中,无论是我对技术的理解还是对语言的把握,都有了相当的提高,这一点将在书中得以体现。第一版的读者可能会发现,中文第二版不仅更新了英文版中更新的那些部分,同时还对第一版已有的内容进行了修订和润色。我相信本书不仅是《.NET设计规范(第2版)》,而且是一本更好的《.NET设计规范》。
虽然我竭尽所能力求译文的准确和流畅,但鉴于时间和精力有限,难免会有翻译不当甚至是错误之处。为此我建立了一份网上勘误表,如果读者发现任何错误,都请通过该网页与我联系,一旦确认我会立即将其更新到勘误表中。勘误表的网址为:www.gesoftfactory.com/ge/Framework DesignGuidelines2/。
我要感谢本书的编辑丁晓昀对我的理解和支持,我们之间的合作非常愉快。我还要感谢我的同事吴宇进、田超、唐友、张羿和王彩霞,他们在繁忙的工作之余审阅译稿,发现了不少难以觉察的问题,并提出了许多宝贵的意见和建议,从而使得本书的质量更上一层楼。最后,我要感谢我的妻儿,他们的支持和鼓励,是我前进的动力。
葛子昂
2010年3月
前言
·大规模的系统框架。这些框架通常都有成千上万个类型,并且为大量的开发人员所使用,如.NET Framework。
·中等规模的程序库。这既可以是大型分布式应用程序的可重用层,也可以是对系统框架的可重用扩展,如Web服务扩展(Web Services Enhance- ments)。
·小规模组件。为多个应用程序所共享,如网格控件(grid control)库。
值得注意的是,本书关注的是直接影响框架(可以公开访问的API)可编程能力的设计问题。因此,我们不会过多涉及实现细节。正如一本介绍用户界面设计的书不会讨论有关如何实现碰撞测试(hit testing)的细节一样,本书也不会讲解如何实现二叉排序。这样的定位使我们能够提供针对框架设计师的完整可靠的指南,而不是又一本关于编程方面的书。
书中的规范是在.NET Framework的开发早期形成的,它们最早只是少量的命名和设计约定,但是经过不断改进、检验、提炼,这些规范最终成为了微软内部公认的框架设计规范。这些规范历经.NET Framework三个版本的长期开发,凝聚了数千名开发人员累积的经验和智慧。我们并不希望本书只是基于一些理想化的设计理念,我们认为本书是极其注重实效的,微软的各开发组将之用于日常开发就是很好的证明。
本书包含许多评注,它们有的解释了相应规范的利弊权衡,有的介绍了其历史,有的给出了进一步的说明,有的提出了自己的批评意见。所有评注都来自经验丰富的框架设计师、业界专家及用户。这些源于开发一线的故事,为书中的许多规范增色不少。
为了使命名空间名、类、接口、方法、属性及类型能够在正文中一目了然,我们用Consolas字体表示。
本书的读者应该基本知道如何使用.NET Framework编程,有一些规范要求读者熟悉.NET Framework 3.5版引入的新特性。如果你想找一本介绍Framework编程的书,那么可以参考书后的Suggested Reading List部分,其中有一些非常好的建议。规范的表示方法
我们通过要(Do)、考虑(Consider)、避免(Avoid)、不要(Do not)这些词把书中的规范组织成一条条简单的建议。每一条规范都描述了一种好的或是不好的做法,并用统一的方式来表示。好的做法,在其前面会用.表示;与此对应,不好的做法则用.表示。每一条规范的措词也会明确表示出这条规范的重要性。例如,“要……”描述的是必须①遵循的规范(下面所有的例子都摘自本书):
DO要在命名自定义的attribute类时加上“Attribute”后缀。
public class ObsoleteAttribute : Attribute { ... }
另一方面,“考虑……”描述的是在一般情况下应该遵循的规范,但如果完全理解规范背后的道理,并有很好的理由不遵循它时,也不要畏惧打破常规:
CONSIDER考虑将类型定义为结构,而不要定义为类,如果该类型的实例较小、存活期较短或通常内嵌在其他对象中。
同样,“不要……”描述的是一些绝对不应该违反的规范:
DO NOT不要把可变类型的实例赋给只读字段。“避免……”就没有那么绝对,它描述的做法虽然通常并不好,但却存在一些已知的可以违反该规范的情况:
AVOID避免使用ICollection(T ]或ICollection作为参数,如果其目的仅仅只是为了访问Count属性。
对那些更为复杂的规范,我们会另外提供一些背景知识、代码示例及基本原理:
DO要为值类型实现IEquatable(T ]。
值类型的Object.Equals方法会导致装箱,而且由于使用了反射,因此默认实现的效率不高。IEquatable(T ].Equals能够提供更好的性能,而且它的实现可以避免装箱操作。
序言
过去16年里,我一直在从事开源软件工作。由于开源的特点,开发者不仅文化背景不同,连开发时间也会跨越好几年,这时坚守一种风格和编码约定就显得特别重要。虽然我们有维护人员,其日常的工作就是重写或修改提交来的软件,保证代码遵守项目编码标准和风格,但是,如果参与软件项目的所有人一开始就使用项目的约定,当然就更为理想。通过实践和标准所传达出的信息越多,未来新加入的人员就越容易上手。这有利于项目汇聚和融合新老代码。
.NET Framework在成长,其开发者社区也在成长,人们不断确定了新的实践、模式和约定。Brad和Krzysztof挺身而出,成为了这些规则的“监护人”,他们把这些新知识转变为现在这本规范。他们通常会在博客里介绍新的约定,收集社区的反馈,再记录下这些规范。在我看来,任何人若有兴趣用好.NET Framework,则必须要常看他们的博客。
这本书第1版出版以后,立即成为整个Mono社区传诵的经典,其原因大体有两个。首先,我们可以由此了解各种.NET API实现的原委和方式;其次,我们珍视其为无价的规范,也努力贯彻在自己的程序和库的设计过程中。第2版不仅建立在第1版成功的基础之上,而且还添加了不少新的知识。许多规范还增加了注解,注解者本身就是行业里首屈一指的.NET架构师和伟大的程序员,正是他们帮助确定了这些规范。
最后我要说,这本书远不止是一本规范。它是我们热爱的一部经典,可以帮助我们成为一名杰出的程序员,而这样的程序员在我们行业里现在还为数不多。
Miguel de Icaza
墨西哥自由软件开发者,GNOME和Mono项目创建者
于马萨诸塞州波士顿市
前一版序
在.NET框架开发的早期(那时甚至.NET框架这个名字还没有诞生呢),我花了无数时间与各开发组一起对框架的设计进行评审,以确保最终得到的平台是易于理解、内在一致的。我始终认为对框架来说,最关键的品质应该是一致性。一旦用户理解了框架的一部分,那么就应该能立即理解框架的其他部分。
可以想象,一大群聪明人在一起肯定会有许多不同意见,我们的开发组正是如此——再没有其他什么事情能比编程约定更能激发出生动而热烈的辩论了。但是,为了保证一致性,我们逐渐化解了各种不同意见,并将结果编纂为一组通用的规范,这样程序员就能容易地理解并使用框架。
Brad Abrams和Krzysztof Cwalina先后帮助我们把这些规范整理到文档中,并不断对其进行更新和完善。本书就是他们的工作成果。
这些规范有效地帮助我们完成了.NET框架的三个版本和许多小项目。而且,这些规范还在指导着微软Windows操作系统的下一代API——WinFX的开发。
希望通过阅读本书,读者也能使自己的框架、类库及组件变得易于理解,易于使用。
希望框架设计能给你带来快乐。祝好运!
Anders Hejlsberg
微软杰出工程师,C#和Delphi之父
2005年6月于美国华盛顿州雷德蒙德市
媒体评论
——Francesco Balena,意大利VB移植伙伴团队公司(www.vbmigration.com)
代码架构师,技术作家,微软地区经理
“框架极有价值,但却出了名地难以构建,因为你在构建过程中的每一个决策都必须环环相扣,使框架容易被正确使用,而又很难被用错。本书带给你一条条中肯的建议,可以让你不必事后后悔不迭地说‘我早点儿知道这个就好了’。我要是早点儿看到这本书就好了。”
——Paul Besley,QA公司首席技术官
“自从Brooks的《人月神话》出版以来,已经很久没有大的软件厂商为现代软件开发人员出版这样一本充满优秀建议的书厂。本书会在我的书架上永久占据一席之地,我会经常去查阅的。”
——George Byrkit,Genomic Solutions公司高级软件工程师
“本书根据.NET Framework 3.0和3.5语言的新特性做了全面更新,完全可以继续作为想要设计类库框架的.NET开发者和架构师的权威参考。某些既有规范加了新的注解,更加详细,并且又增加了一些涉及扩展方法和可空类型等特性的新规范。每条规范都能帮助开发者写出清晰易懂的代码,而本版增加的注解内容将帮助你深入了解.NET框架演变过程中的重大设计决策。”
——Scott Dorman,微软MVP,坦帕湾区国际软件架构师协会主席
“本书对各层次开发者和架构师极为有用,为他们提供了实用的规范和理解这些规则的专家级背景信息。新版的规范更趋完美,你若想写出能很好地集成在.NET环境中的应用,就非看此书不可。”
——Cristof Falk,软件工程师
“本书绝对是所有.NET开发人员的必读之作。它清楚地告诉你在设计.NET类库的时候该做什么,不该做什么。它还揭示了.NET设计和创建过程中的一些内幕,使开发人员了解事情的来龙去脉。这些宝贵信息将帮助开发人员写好自己的类库,并能更加有效地利用.NET类库。”
——Jeffrey Richter,技术作家/培训师/咨询师,Wintellect公司
“本书给予大家一些崭新的重要启示,可应用于自己的类库设计。两位作者开诚布公地讨论了面临的挑战:为已发布的产品增加新特性,却要对现有代码影响最小。你可以看到.NET类库团队在创建2.0、3.0和3.5版的时候是怎么做的,他们的优秀范例可以指导你为自己的软件创造出N+I版。他们在尽量少影响现存API的情况下,增加了泛型、WCF、WPF、WF、LINQ等新特性,甚至让客户可以只使用部分新特性,而保持对原有库的兼容。”
——Bill Wagner,SRT Solutions公司创始人及顾问,
《Effective C#中文版》和《More Effective C#中文版》的作者
“本书是所有从事框架工作的架构师和软件开发人员必读的作品。书中揭示了.NET框架设计时所做的一些思考。对于承担应用框架创建任务的人员来说,本书不可不读。”
——Peter Winkler,Balance技术公司高级软件工程师
“本书第1版出版以后,立即成为整个Mono社区传诵的经典……这一版弥补了上一版的很多不足,而众多参与规范制定的核心.NET架构师和顶尖程序员所做的评注也极大地丰富了本书的内涵。”
——Miguel de Icaza,墨西哥自由软件开发者,GNOME和Mono项目创建者
【插图】
