前言
由於最近工作重心的轉移,原來和幾個同事一起開發的項目也已經上線了,而新項目就是在現有的項目基礎上進行優化延伸擴展。打個比方,現在已經上線的項目行政案件的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。由於此書的章節並沒有關聯性,也可以是你需要那些知識,直接看那些章節就可以了。所以自己打算在工作中遇到問題可以直接對症下葯了。