具体描述
本书为框架设计师和广大开发人员设计高质量的软件提供了权威的指南。书中介绍了在设计框架时的最佳实践,提供了自顶向下的规范,其中所描述的规范普遍适用于规模不同、可重用程度不同的框架和软件。这些规范历经.net框架三个版本的长期开发,凝聚了数千名开发人员的经验和智慧。微软的各开发组正在使用这些规范开发下一代影响世界的软件产品。.
本书适用于框架设计师以及相关的专业技术人员,也适用于高等院校相关专业的学生和教师阅读参考。
作者简介
krzysztof cwalina 微软公司公共语言运行库(clr)的项目经理。他曾为.net框架的首个版本设计api,并负责框架中的多个名字空间,包括system.collections、system.diagnostics、system.messaging,等等。他也是fxcop开发组的发起成员之一。目前,他正致力于在整个公司范围内开发推广设计规范,并将其应用到.net框架和winfx中。
brad abrams 微软公司公共语言运行库开发组和.net框架开发组的创始成员之一,目前是lead program manager。brad也是公共语言规范(cls)、.net框架设计规范及ecmaiso cli标准中程序库标准的主编。brad与他人合著了programming in the .net environment,他还是.net framework standard library annotated reference(卷1和卷2)的编辑。读者可以从他的blog:http://blogs.msdn.com/brada/中了解他最新的想法。
葛子昂,1998年毕业于南京理工大学计算机系,目前就职于微软亚洲工程院上海分院,致力于windows server的相关研发。之前曾先后任职于上海育碧电脑软件有限公司和上海旭上电子有限公司,从事游戏软件的开发及图形处理器的设计。
目录信息
1.1 精心设计的框架所具备的品质 2
1.1.1 精心设计的框架是简单的 2
1.1.2 精心设计的框架设计代价高 3
1.1.3 精心设计的框架充满利弊权衡 3
1.1.4 精心设计的框架应该借鉴过去 4
1.1.5 精心设计的框架要考虑未来发展 4
1.1.6 精心设计的框架应具有良好的集成性 4
1.1.7 精心设计的框架是一致的 4
第2章 框架设计基础 6
2.1 渐进框架 7
2.2 框架设计的基本原则 10
2.2.1 场景驱动设计的原则 11
2.2.2 低门槛原则 17
2.2.3 自说明对象模型原则 20
2.2.4 分层架构原则 25
2.3 小结 27
第3章 命名规范 28
3.1 大小写约定 29
3.1.1 标识符的大小写规则 29
.3.1.2 首字母缩写词的大小写 31
3.1.3 复合词和常用术语的大小写 33
3.1.4 是否区分大小写 35
3.2 通用命名约定 35
3.2.1 单词的选择 36
3.2.2 使用单词缩写和首字母缩写词 37
3.2.3 避免使用语言特有的名字 38
3.2.4 为已有api的新版本命名 39
3.3 程序集和dll的命名 42
3.4 名字空间的命名 43
3.5 类、结构和接口的命名 47
3.5.1 泛型类型参数的命名 49
3.5.2 常用类型的命名 50
3.5.3 枚举类型的命名 51
3.6 类型成员的命名 53
3.6.1 方法的命名 53
3.6.2 属性的命名 54
3.6.3 事件的命名 55
3.6.4 字段的命名 57
3.7 参数的命名 57
3.8 资源的命名 58
3.9 小结 59
第4章 类型设计规范 60
4.1 类型和名字空间 62
4.2 类和结构之间的选择 67
4.3 类和接口之间的选择 69
4.4 抽象类的设计 76
4.5 静态类的设计 78
4.6 接口的设计 79
4.7 结构的设计 81
4.8 枚举的设计 83
4.8.1 标记枚举的设计 89
4.8.2 给枚举添加值 93
4.9 嵌套类型 94
4.10 小结 96
第5章 成员设计 97
5.1 成员设计的一般规范 97
5.1.1 成员重载 97
5.1.2 显式地实现接口成员 102
5.1.3 属性和方法之间的选择 106
5.2 属性的设计 112
5.2.1 索引属性的设计 113
5.2.2 属性改变的通知事件 115
5.3 构造函数的设计 117
5.4 事件的设计 123
5.5 字段的设计 130
5.6 操作符重载 132
5.6.1 重载operator== 136
5.6.2 类型转换操作符 136
5.7 参数的设计 138
5.7.1 枚举和布尔参数之间的选择 140
5.7.2 参数的验证 142
5.7.3 参数的传递 145
5.7.4 参数数量可变的成员 147
5.7.5 指针参数 150
5.8 小结 152
第6章 为扩展性而设计 153
6.1 扩展机制 153
6.1.1 非密封类 153
6.1.2 保护成员 155
6.1.3 事件与回调函数 156
6.1.4 虚成员 158
6.1.5 抽象(抽象类型与抽象接口) 160
6.2 基类 162
6.3 密封 163
6.4 小结 166
第7章 异常 167
7.1 抛出异常 171
7.2 为抛出的异常选择合适的类型 175
7.2.1 错误消息的设计 176
7.2.2 异常处理 177
7.2.3 对异常进行封装 182
7.3 标准异常类型的使用 184
7.3.1 exception与systemexception 184
7.3.2 applicationexception 184
7.3.3 invalidoperationexception 184
7.3.4 argumentexception、argumentnullexception 及argumentoutofrangeexception 185
7.3.5 nullreferenceexception、indexoutofrangeexception及accessviolationexception 186
7.3.6 stackoverflowexception 186
7.3.7 outofmemoryexception 187
7.3.8 comexception、sehexception及其他clr异常 188
7.3.9 executionengineexception 188
7.4 自定义异常的设计 188
7.5 异常与性能 190
7.5.1 tester-doer模式 190
7.5.2 try-parse模式 191
7.6 小结 192
第8章 使用规范 193
8.1 数组 193
8.2 attribute 195
8.3 集合 198
8.3.1 集合参数 199
8.3.2 集合属性与返回值 200
8.3.3 数组与集合之间的选择 204
8.3.4 自定义集合的实现 205
8.4 icloneable 207
8.5 icomparable[t]与iequatable[t] 208
8.6 idisposable 210
8.7 对象 210
8.7.1 object.equals 210
8.7.2 object.gethashcode 212
8.7.3 object.tostring 213
8.8 uri 214
8.9 system.xml的使用 216
8.10 相等性操作符 218
8.10.1 值类型的相等性操作符 218
8.10.2 引用类型的相等性操作符 219
第9章 常用的设计模式 220
9.1 聚合组件 220
9.1.1 面向组件的设计 222
9.1.2 因子类型 224
9.1.3 聚合组件规范 224
9.2 async模式 227
9.3 dispose模式 232
9.3.1 基本dispose模式 234
9.3.2 可终结类型 240
9.4 factory模式 243
9.5 optional feature模式 247
9.6 template method模式 251
9.7 超时 252
9.8 结束语 254
附录a c#编程风格约定 255
a.1 通用风格约定 255
a.1.1 花括号的使用 255
a.1.2 空格的使用 257
a.1.3 缩进的使用 259
a.2 命名约定 259
a.3 注释 260
a.4 文件的组织 261
附录b 通过fxcop来实施设计规范 263
b.1 fxcop是什么? 263
b.2 fxcop的发展过程 264
b.3 fxcop的工作原理 265
b.4 fxcop规范的覆盖范围 265
b.4.1 与命名规范有关的fxcop规则 265
b.4.2 与类型设计规范有关的fxcop规则 274
b.4.3 与成员的设计有关的fxcop规则 277
b.4.4 与为扩展性而设计有关的fxcop规则 284
b.4.5 与异常有关的fxcop规则 285
b.4.6 与使用规范有关的fxcop规则 287
b.4.7 与设计模式有关的fxcop规则 291
附录c api规范样例 292
术语表 299
推荐读物 303
索引 305
· · · · · · (收起)
读后感
程序和画画一样,无非就是各种元素的控制和充填,只是把画画中的线条,点什么的变成了程序中的类,接口,函数,然后在统一构成一幅完整的画卷(程序),如此而已。 首先,本书好就好在,它告诉了你程序中的这些元素在.Net中应该如何使用,如何选择。 当你还在为选择是用接口...
结果几乎是考着对比原文看完的,什么"内部受保护的列表",把几乎所有大家都知道的英文关键字都翻译成中文,这就已经够难读的了,而且很多句子都部通顺.怪不得这么快就绝版买不到了. 书是好书,建议所有的.NET程序员都读一下
结果几乎是考着对比原文看完的,什么"内部受保护的列表",把几乎所有大家都知道的英文关键字都翻译成中文,这就已经够难读的了,而且很多句子都部通顺.怪不得这么快就绝版买不到了. 书是好书,建议所有的.NET程序员都读一下
不知道为什么把书名译成这样,英文原本是:Framework Design Guidelines,多么大气的名字。结果被译成:.NET设计规范。 从目录上看,本书主要还是讲如何设计好一个framework,与平台和语言无关,只是通过.NET平台来举例具体说明,中文书名却把副标题中的.NET当成了...
用户评价
说实话,我买这本书的时候,并没有抱太大的期望,毕竟市面上关于.NET的书籍琳琅满目,很多都大同小异,要么过于理论化,要么过于碎片化,很难找到一本能够系统性地指导我提升代码设计能力的。但是,这本书彻底颠覆了我的认知。它不仅仅是一本“工具书”,更像是一本“思想启蒙书”。作者以一种极其严谨和深刻的视角,剖析了.NET生态系统中各种设计模式和原则背后的逻辑,以及它们是如何在实际开发中发挥作用的。我最欣赏的是,它没有简单地罗列各种规范,而是深入讲解了“为什么”要这样做。例如,在解释“开闭原则”时,作者不仅仅是给出了代码示例,更通过分析不同的业务场景,阐述了遵循这个原则能够为未来的代码扩展带来多少便利,又避免了多少潜在的麻烦。这本书也让我对“代码质量”有了全新的认识,不再是简单地看代码能不能跑,而是要看代码是否“健壮”、“优雅”、“易于维护”。读完这本书,我感觉自己的“代码感”得到了极大的提升,仿佛拥有了一双“火眼金睛”,能够一眼看出代码中的潜在问题,并知道如何去优化它。
这本书简直是给我打开了一扇新世界的大门!我一直以来在.NET开发领域摸爬滚打,虽然也能实现功能,但总感觉代码的健壮性、可维护性和扩展性上差了点火候,写出来的东西也经常被同事吐槽不够“规范”。读了这本书,我才明白那些看似微不足道的细节,例如命名约定、代码注释的深度和目的、异常处理的哲学,甚至是文件目录的组织方式,竟然能够对项目的生命周期产生如此深远的影响。书中的例子非常贴切,不是那种脱离实际的理论堆砌,而是我日常开发中经常会遇到的场景。作者的讲解深入浅出,即使是某些复杂的概念,也通过生动的比喻和图示变得易于理解。我尤其喜欢关于“SOLID”原则的讲解,之前只是模糊的概念,现在有了这本书的指导,我能更清晰地认识到如何在实际编码中应用它们,让我的设计思维得到了质的提升。现在我写代码时,脑子里会不自觉地过滤,思考“这样做是不是更符合设计规范?”这种想法已经成为了我工作的一部分,效率和代码质量都明显提高了,项目周期也好像缩短了不少,同事们也开始称赞我的代码“有内味儿了”。
我之前对.NET的理解,停留在“能用就行”的层面,对“设计规范”这个概念,其实是有些嗤之以鼻的,觉得不过是些形式主义的东西,浪费时间和精力。直到我接手了一个遗留项目,那代码写得简直是“屎山”,到处都是bug,改动一点点地方就会引发连锁反应,团队士气也因为这个项目跌入谷底。在一次偶然的机会,我看到了这本书,抱着“死马当活马医”的心态翻了翻。结果,我被深深地震撼了!这本书不是在教你怎么写一行能跑的代码,而是在教你怎么写一行“好”的代码,一行能够经受住时间考验、易于理解、便于维护、并且能够随着业务发展而优雅演进的代码。它从代码的可读性、可测试性、可复用性等多个维度,系统地阐述了.NET开发应该遵循的原则和最佳实践。那些关于接口设计的哲学,关于抽象层次的权衡,关于依赖注入的深入探讨,都让我茅塞顿开。我开始反思自己过往的开发习惯,那些曾经自认为“聪明”的设计,在规范面前显得如此稚嫩和短视。现在,我会在团队内部大力推广这本书的理念,我们正在逐步改造那个“屎山”项目,虽然过程艰辛,但看到代码质量一点点提升,看到团队的协作更加顺畅,我内心充满了成就感,也更加坚信“设计规范”的价值。
这本书对我来说,简直是.NET开发领域的一部“圣经”!我从事.NET开发多年,自以为已经掌握了不少技巧,但读完这本书,我才意识到自己之前的很多认知都停留在表面。作者的见解非常独到,他将.NET的各种设计原则和最佳实践,用一种系统化、逻辑化的方式呈现出来,让我看到了一个更加宏观和深刻的.NET设计体系。我尤其欣赏书中关于“代码演进”的探讨,它让我明白,软件开发是一个持续迭代的过程,而良好的设计规范,是支撑这种持续演进的基石。那些关于“如何应对不断变化的业务需求”、“如何让代码保持生命力”的分析,都让我受益匪浅。书中的很多观点,都与我过往的开发经验产生了强烈的共鸣,也让我对一些曾经困扰我的问题找到了清晰的解答。现在,我对待代码的态度发生了根本性的转变,不再仅仅追求功能的实现,而是更加注重代码的“质量”和“长远价值”。这本书已经成为了我书架上最常被翻阅的一本,也是我推荐给身边每一个.NET开发者的首选。
作为一个.NET的初学者,我之前一直为如何写出“像样的”代码而感到苦恼。网上的教程零散,各种“黑魔法”和“套路”让人眼花缭乱,根本不知道从何学起。这本书就像黑暗中的一盏明灯,为我指明了方向。它没有上来就讲高深的算法或者复杂的框架,而是从最基础、最核心的设计理念讲起,循序渐进,非常适合我们这些新手。例如,关于命名规范的讲解,看似简单,却能让我明白为什么清晰的命名能够极大地提高代码的可读性;关于代码分层的讨论,让我理解了如何组织代码才能让项目结构更加清晰明了。作者的语言非常生动有趣,很多时候我都忍不住哈哈大笑,感觉不像是在读书,而是在和一个经验丰富的导师在进行一次愉快的交流。更重要的是,它让我明白,写好代码不仅仅是记住一些语法规则,更重要的是要培养一种“设计思维”。现在,我写代码时,会更加注重代码的结构和逻辑,努力让每一行代码都服务于整体的设计目标。
公用API设计规范 不一样哦 专家批注是特色
.net 码农行为守则,大神点评还是很有用的
看的第一本关于编码规范的书,对我之后的coding影响很深
翻译很不错, 当然内容更不错
公用API设计规范 不一样哦 专家批注是特色