zoukankan      html  css  js  c++  java
  • 编写高质量代码改善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。由于此书的章节并没有关联性,也可以是你需要那些知识,直接看那些章节就可以了。所以自己打算在工作中遇到问题可以直接对症下药了。

  • 相关阅读:
    Elasticsearch Query DSL 整理总结(三)—— Match Phrase Query 和 Match Phrase Prefix Query
    Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了
    Elasticsearch Query DSL 整理总结(一)—— Query DSL 概要,MatchAllQuery,全文查询简述
    Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
    Elasticsearch date 类型详解
    python 历险记(五)— python 中的模块
    python 历险记(四)— python 中常用的 json 操作
    python 历险记(三)— python 的常用文件操作
    Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
    Elasticsearch Java Rest Client API 整理总结 (一)——Document API
  • 原文地址:https://www.cnblogs.com/aehyok/p/3624579.html
Copyright © 2011-2022 走看看