.NET设计规范:约定、惯用法与模式(第2版.英文影印版)(.NET开发者的必备图书,附赠DVD光盘)
基本信息
- 原书名: Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition)
- 原出版社: Addison-Wesley Professional
- 作者: (美)Krzysztof Cwalina Brad Abrams [作译者介绍]
- 丛书名: 图灵程序设计丛书 C#与.NET系列
- 出版社:人民邮电出版社
- ISBN:9787115214454
- 上架时间:2010-1-15
- 出版日期:2010 年1月
- 开本:16开
- 页码:443
- 版次:2-1
- 所属分类:
计算机 > 软件与程序设计 > .NET > 综合
编辑推荐
微软.NET Framework设计组的智慧结晶
洞悉.NET技术内幕
.NET开发者的必备图书
内容简介回到顶部↑
本书关注直接影响框架可编程能力的设计问题,为框架设计师和广大开发人员设计高质量的软件提供了权威的指南,这一版更新至.net 3.5。书中内容涉及框架设计的基本原则和规范,常用设计惯用法,为命名空间、类型、成员等框架各部分命名的规范,框架中常用设计模式的规范等。同时,书中添加了来自经验丰富的框架设计师、业界专家及用户给出的评注,为书中的许多规范增色不少。
本书为框架设计师必读之作,也可用作.net开发人员的技术参考书。
本书为框架设计师必读之作,也可用作.net开发人员的技术参考书。
作译者回到顶部↑
本书提供作译者介绍
Krzysztof Cwalina 微软公司.NET Framework开发组项目经理。他为.NET Framework设计了多个API,还开发了FxCop等框架开发工具。目前,他正致力于在微软内部开发推广设计规范,将其应用到.NET Framework中,同时负责核心.NET Framework API的交付。
Brad Abrams 微软公司CLR开发组和.NET Framework开发组的创始人之一,目前是项目经理主管。他参与制定了CLS、.NET Framework设计规范以及ECMA/ISO CLI标准中程序库标准,著有Programming in the .NET Environment、.NET Framework Standard Lib.. << 查看详细
Brad Abrams 微软公司CLR开发组和.NET Framework开发组的创始人之一,目前是项目经理主管。他参与制定了CLS、.NET Framework设计规范以及ECMA/ISO CLI标准中程序库标准,著有Programming in the .NET Environment、.NET Framework Standard Lib.. << 查看详细
目录回到顶部↑
1 introduction 1
1.1 qualities of a well-designed framework 3
1.1.1 well-designed frameworks are simple 3
1.1.2 well-designed frameworks are expensive to design 4
1.1.3 well-designed frameworks are full of trade-offs 5
1.1.4 well-designed frameworks borrow from the past 5
1.1.5 well-designed frameworks are designed to evolve 5
1.1.6 well-designed frameworks are integrated 6
1.1.7 well-designed frameworks are consistent 6
2 framework design fundamentals 9
2.1 progressive frameworks 11
2.2 fundamental principles of framework design 14
2.2.1 the principle of scenario-driven design 15
2.2.2 the principle of low barrier to entry 21
2.2.3 the principle of self-documenting object models 26
2.2.4 the principle of layered architecture 33
3 naming guidelines 37
3.1 capitalization conventions 38
3.1.1 capitalization rules for identifiers 38
3.1.2 capitalizing acronyms 40
1.1 qualities of a well-designed framework 3
1.1.1 well-designed frameworks are simple 3
1.1.2 well-designed frameworks are expensive to design 4
1.1.3 well-designed frameworks are full of trade-offs 5
1.1.4 well-designed frameworks borrow from the past 5
1.1.5 well-designed frameworks are designed to evolve 5
1.1.6 well-designed frameworks are integrated 6
1.1.7 well-designed frameworks are consistent 6
2 framework design fundamentals 9
2.1 progressive frameworks 11
2.2 fundamental principles of framework design 14
2.2.1 the principle of scenario-driven design 15
2.2.2 the principle of low barrier to entry 21
2.2.3 the principle of self-documenting object models 26
2.2.4 the principle of layered architecture 33
3 naming guidelines 37
3.1 capitalization conventions 38
3.1.1 capitalization rules for identifiers 38
3.1.2 capitalizing acronyms 40
前言回到顶部↑
本书介绍了设计框架的最佳实践。所谓框架,即可重用面向对象程序库。书中所描述的规范普遍适用于下述规模不同、可重用程度不同的框架。
大规模的系统框架。这些框架通常都有成千上万个类型,并且为大量的开发人员所使用,如.NET Framework。中等规模的程序库。这既可以是大型分布式应用程序的可重用层,也可以是对系统框架的可重用扩展,如Web服务扩展(Web Services Enhancements)。
小规模组件。为多个应用程序所共享,如网格控件(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能够提供更好的性能,而且它的实现可以避免装箱操作。
public struct Int32 : IEquatable(Int32) {
大规模的系统框架。这些框架通常都有成千上万个类型,并且为大量的开发人员所使用,如.NET Framework。中等规模的程序库。这既可以是大型分布式应用程序的可重用层,也可以是对系统框架的可重用扩展,如Web服务扩展(Web Services Enhancements)。
小规模组件。为多个应用程序所共享,如网格控件(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能够提供更好的性能,而且它的实现可以避免装箱操作。
public struct Int32 : IEquatable(Int32) {
序言回到顶部↑
.NET Framework一推出,我就立即对它着了迷。这种技术让CLR(通用语言运行库)及其大量API,以及C#语言的优势立刻彰显无遗。这些技术无不体现了API的通用设计风格和始终贯彻的一系列约定。这就是.NET文化。一旦你了解了这种文化,就容易把有关知识运用到框架设计的其他领域中去。
过去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月于美国华盛顿州雷德蒙德市
过去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月于美国华盛顿州雷德蒙德市
媒体评论回到顶部↑
“本书第1版出版以后,立即成为整个Mono社区传诵的经典……这一版弥补了上一版的很多不足,而众多参与规范制定的核心.NET架构师和顶尖程序员所做的评注也极大地丰富了本书的内涵。”
——Miguel de Icaza,墨西哥自由软件开发者,GNOME和Mono项目创建者
“本书绝对是所有.NET开发人员的必读之作。它总结了.NET本身设计和开发过程中获得的经验和教训,不仅使你对.NET能够知其所以然,还能极大地帮助你更高效地使用.NET类库。”
——Jeffrey Richter,微软技术大师,名著《Windows核心编程》作者
——Miguel de Icaza,墨西哥自由软件开发者,GNOME和Mono项目创建者
“本书绝对是所有.NET开发人员的必读之作。它总结了.NET本身设计和开发过程中获得的经验和教训,不仅使你对.NET能够知其所以然,还能极大地帮助你更高效地使用.NET类库。”
——Jeffrey Richter,微软技术大师,名著《Windows核心编程》作者
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)
· 图灵公司详细书目

点击看大图





加载中...
