编写高质量代码改善C#程序的157个建议——导航开篇
前言
由于最近工作重心的转移,原来和几个同事一起开发的项目也已经上线了,而新项目就是在现有的项目基础上进行优化延伸扩展。打个比方,现在已经上线的项目行政案件的Web管理网站(代码还没那么多相比较即将要做的刑事案件吧),而新项目是刑事案件的Web管理网站,之后行政和刑事这两个网站是要合并的。前段时间也和同事以及上司的讨论结果就是新建一套项目,考虑将原有系统各种组件进行重新封装、优化、提升扩展,然后先开发刑事案件的网站,待刑事案件开发完毕将原有项目按照刑事案件的思路重新整合。
最近刚开始进行查看老代码也发现太多的问题,感觉无从下手,有些东西当时都是只是实现了功能而已,由于自己经历和经验都还很有限。所以打算来学习一下,无独有偶发现了这本书,哈哈,自己感觉也很不错,所以想在此做下笔记。
为什么要来看这本书
写此书的作者在书中也有明确的记录。作者一直在思考一个问题:就是到底什么样的编程书籍能够帮助入门者快速进阶?所谓“入门者”指的是已经可以使用一门语言来编写程序,但是不太明白如何编写高质量代码的人。作者回忆自己开发生涯的入门阶段发现,那时候常常被以下三类问题所困扰。
第一类来自于语言本身。
1、如何格式化字符串才是最高效的?
2、基本类型间或其他CLR类型间的转换怎样才算是最高效的?
3、for和foreach有什么区别,何时该用for,何时又该用foreach?
4、什么是Dispose模式,为什么要释放资源,如何释放资源?
5、多线程应该选择何种方式来开启和结束,各线程之间为什么要同步,如何同步,如何锁定资源?
第二类来自于设计框架,如果你对编程充满热爱,相信你的大脑很快就会充满以下这些问题:
1、使用单例模式还是静态类,为什么有了静态类还需要单例模式?
2、该使用静态方法还是实例方法,它们的本质区别是什么?
3、如何使用异常才是最正确的,什么时候抛出异常,什么时候“吃掉”异常,为什么需要自定义异常?
4、如何避免过多的条件判断分支?
5、如何保证程序的数据安全和通信安全?
第三类问题最常见,可能来自于编码习惯和编程思想。
1、一个文件只包含一个类比较好,还是一个文件可以包含多个类?
2、如何命名才是专业级别的?
3、应该使用抽象类还是接口?
4、到底什么才是真正的面向对象编码,我这样编程够面向对象吗?
5、什么是单元测试,如何编写单元测试?
如果你也曾问过自己类似的问题,说明你已经为专业程序员做好了准备了。当然如果你还是苦于找不到答案的话,或许你也可以来阅读下此书,相信你会收获颇丰的。自己大致看了一下此书,感觉作者还是花了很多心思的,很多知识讲解的还是都很不错的,在此也只是希望更多的人受益,当然不喜勿喷额。
本书大纲目录
第一部分 语言篇
1、第一章 基本语言要素
http://www.cnblogs.com/aehyok/p/3624478.html[1-3]
建议1、正确使用字符串
建议2、使用默认转型方法
建议3、区别对待强制转型与as和is
http://www.cnblogs.com/aehyok/p/3629760.html[4-9]
建议4、TryParse比Parse好
建议5、使用int?来确保值类型也可以为null
建议6、区别readonly和const的使用方法
建议7、将0值作为枚举的默认值
建议8、避免给枚举类型的元素提供显式的值
建议9、习惯重载运算符
http://www.cnblogs.com/aehyok/p/3631483.html[10-12]
建议10、创建对象时需要考虑是否实现比较器
建议11、区别对待==和Equals
建议12、重写Equals时也要重写GetHashCode
http://www.cnblogs.com/aehyok/p/3634984.html[13-15]
建议13、为类型输出格式化字符串
建议14、正确实现浅拷贝和深拷贝
建议15、使用dynamic来简化发射实现
2、第二章 集合和LINQ
http://www.cnblogs.com/aehyok/p/3637504.html[16-19]
建议16、元素数量可变的情况下不应使用数组
建议17、在多数情况下使用foreach进行循环遍历
建议18、foreach不能代替for
建议19、使用更有效的对象和集合初始化
http://www.cnblogs.com/aehyok/p/3641896.html[20-22]
建议20、使用泛型集合来替代非泛型集合
建议21、选择正确的集合
建议22、确保集合的线性安全
http://www.cnblogs.com/aehyok/p/3657862.html [23-25]
建议23、避免将List<T>作为自定义集合类的基类
建议24、迭代器应该是只读的
建议25、谨慎集合属性的可写操作
http://www.cnblogs.com/aehyok/p/3674866.html [26-28]
建议26、使用匿名类型储存LINQ查询结果
建议27、在查询中使用Lambda表达式
建议28、理解延迟求值和主动求值之间的区别
http://www.cnblogs.com/aehyok/p/3712725.html[29-31]
建议29、区别LINQ查询中的IEnumerable<T>和IQueryable<T>
建议30、使用LINQ取代集合中的比较器和迭代器
建议31、在LINQ查询中避免不必要的迭代
3、第三章 泛型、委托和事件
http://www.cnblogs.com/aehyok/p/3719825.html [32-34]
建议32、总是优先考虑泛型
建议33、避免在泛型类型中声明静态成员
建议34、为泛型参数设定约束
http://www.cnblogs.com/aehyok/p/3725313.html[35-37]
建议35、使用default为泛型类型指定初始值
建议36、使用FCL中的委托声明
建议37、使用lambda表达式代替方法和匿名方法
http://www.cnblogs.com/aehyok/p/3730417.html[38-41]
建议38、小心闭包中的陷阱
建议39、了解委托的实质
建议40、使用event关键字对委托施加保护
建议41、实现标准的事件模型
http://www.cnblogs.com/aehyok/p/3737426.html[42-45]
建议42、使用泛型参数兼容泛型接口的不可变性
建议43、让接口中的泛型参数支持协变
建议44、理解委托中的协变
建议45、为泛型类型参数指定协变
4、第四章 资源管理和序列化
5、第五章 异常和自定义异常
http://www.cnblogs.com/aehyok/p/3750122.html[58-60]
建议58、用抛出异常代替返回错误代码
建议59、不要在不恰当的场合下引发异常
建议60、重新引发异常时使用inner Exception
http://www.cnblogs.com/aehyok/p/3761583.html[61-64]
建议61、避免在finally内撰写无效代码
建议62、避免嵌套异常
建议63、避免“吃掉”异常
建议64、为循环增加Tester-Doer模式而不是将try-catch置于循环内
6、第六章 异步、多线程、任务和并行
第二部分 架构篇
7、第七章 成员设计
8、第八章 类型设计
9、第九章 安全性设计
第三部分 编码规范及习惯
10、第十章 命名规范
11、第十一章 代码整洁
12、第十二章 规范开发行为
总结
从书的开头看起到目录,这本书真真的深深的吸引了我,好像就如作者所说,正中下怀一样。作者所想的那三类问题,有些问题我曾经的确也考虑过,要去找为什么,但是后来放弃了,或者遗忘了,不过今天终于又让我看到了这似曾相识的感觉,这次我要将这些问题一一的剖解,希望自己能多多的学习书中的知识和奥妙吧。
看了上面的,也许很多人和我有同样的想法,要好好来看看这本书,那么我希望大家可以将看书后的一些想法或者问题,发布出来让大家一起来探讨一下,让我等菜鸟也可以多多的见识见识。暂时我也在考虑要不要入手一本,这不刚刚在网上下载的PDF。由于此书的章节并没有关联性,也可以是你需要那些知识,直接看那些章节就可以了。所以自己打算在工作中遇到问题可以直接对症下药了。
编写高质量代码改善C#程序的157个建议——导航开篇的更多相关文章
- 编写高质量代码改善java程序的151个建议——导航开篇
2014-05-16 09:08 by Jeff Li 前言 系列文章:[传送门] 下个星期度过这几天的奋战,会抓紧java的进阶学习.听过一句话,大哥说过,你一个月前的代码去看下,慘不忍睹是吧.确实 ...
- 编写高质量代码改善C#程序的157个建议[1-3]
原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...
- 读书--编写高质量代码 改善C#程序的157个建议
最近读了陆敏技写的一本书<<编写高质量代码 改善C#程序的157个建议>>书写的很好.我还看了他的博客http://www.cnblogs.com/luminji . 前面部 ...
- 编写高质量代码改善C#程序的157个建议——建议157:从写第一个界面开始,就进行自动化测试
建议157:从写第一个界面开始,就进行自动化测试 如果说单元测试是白盒测试,那么自动化测试就是黑盒测试.黑盒测试要求捕捉界面上的控件句柄,并对其进行编码,以达到模拟人工操作的目的.具体的自动化测试请学 ...
- 编写高质量代码改善C#程序的157个建议——建议156:利用特性为应用程序提供多个版本
建议156:利用特性为应用程序提供多个版本 基于如下理由,需要为应用程序提供多个版本: 应用程序有体验版和完整功能版. 应用程序在迭代过程中需要屏蔽一些不成熟的功能. 假设我们的应用程序共有两类功能: ...
- 编写高质量代码改善C#程序的157个建议——建议155:随生产代码一起提交单元测试代码
建议155:随生产代码一起提交单元测试代码 首先提出一个问题:我们害怕修改代码吗?是否曾经无数次面对乱糟糟的代码,下决心进行重构,然后在一个月后的某个周一,却收到来自测试版的报告:新的版本,没有之前的 ...
- 编写高质量代码改善C#程序的157个建议——建议154:不要过度设计,在敏捷中体会重构的乐趣
建议154:不要过度设计,在敏捷中体会重构的乐趣 有时候,我们不得不随时更改软件的设计: 如果项目是针对某个大型机构的,不同级别的软件使用者,会提出不同的需求,或者随着关键岗位人员的更替,需求也会随个 ...
- 编写高质量代码改善C#程序的157个建议——建议153:若抛出异常,则必须要注释
建议153:若抛出异常,则必须要注释 有一种必须加注释的场景,即使异常.如果API抛出异常,则必须给出注释.调用者必须通过注释才能知道如何处理那些专有的异常.通常,即便良好的命名也不可能告诉我们方法会 ...
- 编写高质量代码改善C#程序的157个建议——建议152:最少,甚至是不要注释
建议152:最少,甚至是不要注释 以往,我们在代码中不写上几行注释,就会被认为是钟不负责任的态度.现在,这种观点正在改变.试想,如果我们所有的命名全部采用有意义的单词或词组,注释还有多少存在的价值. ...
随机推荐
- MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- spring访问静态资源文件
用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件.当你在浏览器上直接输入某个css文 ...
- unreal3的坐标系统和vector/rotator
unreal3的坐标系有点奇葩,属于[z轴向上的左手坐标系]: 1.左手食指指前方,x正向 2.大拇指指上方,z正向 3.中指指右方,y正向 若以我们人头摆正时来参考: 1.目视的是前方,x正向 2. ...
- 20145225《Java程序设计》 第10周学习总结
20145225<Java程序设计> 第10周学习总结 教材学习内容总结 一.网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据: 程序员所作的事情就是把数据发送到指定 ...
- 1064. Complete Binary Search Tree (30)
分析: 考察BST + 完全二叉树的性质,注意: (1):先用排序排好,然后由于是完全二叉树,我们使用中序来建树. (2):建好之后,层次遍历可以采用队列. #include <iostream ...
- NOIP2013 题解
转圈游戏 题解:快速幂 #include <cstdio> int n, m, k, x; inline long long QuickPow(int a, int k, int MOD) ...
- SharePoint部署
一.数据库权限 二.wps部署 在项目-属性-生成事件中 命令:xcopy "$(TargetDir)*.dll" "$(SolutionDir)\Deploy\Sha ...
- Duang的成长——使用造字程序输入生僻字
使用造字程序输入生僻字 最近,一个字突然间火了起来,那就是——duang! (图片来自网络) 那么,问题来了!造字程序哪家强?(此处有掌声) 其实,微软早就考虑到各国文字的博大精深,在系统中集成了一个 ...
- 取td里面的内容
var rowLength = document.getElementById("table名字").rows.length; for(var i=0;i<rowLeng ...
- 命令行查看linux发行版版本信息
有时候安装完自己的linux发行版系统(如ubuntu.centos.redhat.opensuse.--)时,把版本信息忽略了,又不想重启电脑,此时我们可以通过命令行方式来查看: 1.cat /et ...