今天起,文章開頭都會推薦一兩首好聽的歌曲,以符合行文的節奏心情,紀念我們流逝的青春。第一天先推薦,許巍的《時光》、《曾經的你》。
編程領域從架構上,可分為兩大部分,框架開發和應用開發。
每個人都是從應用開發起步的,使用著各種官方或第三方框架。java非常依賴各種框架,J2EE, SPRing等。.NET一般只須.NET Framework。框架是現代編程語言不可分割的一部分,框架要精無須大而全,一個不足百KB的JQuery就改變了整個Web的面貌。
在實際開發中,對框架往往有兩種不正確的認識:
一、把框架地位看得過高,往往發生在初學者身上。以為掌握框架就是掌握了這門語言。端著本上千頁的《xxx高級編程》,啃得是頭昏眼花,水平一點也沒長進。ADO.NET、WPF、WCF這些,要那么高級知識干嘛?項目根本用不上。
二、把框架看得過于簡單,一般出現于有數年經驗的開發者身上。隨著開發的磨練,對框架有了一些自己的認識,很多人開始自己建框架,又稱造輪子,發到博客上覺得很不錯。可如果用到實際項目中,這種“框架”會讓未來重構痛不欲生。如果只是用來練習提高也不錯,不過要注意表費太多時間,因為架構往往都很不成熟。我個人就有幾次,自己累得半死,項目還無法保證質量完成,教訓刻骨銘心。
開發框架并不一定牛,但能設計好一個框架一定很牛。那些少于10萬行代碼的項目最好不要搞自己的框架,沒寫到10萬行代碼,千萬別在實際項目中設計“框架”。
如果確實想練練手,更好的主意是參加開源項目,Git和CodePlex上都有許多優秀框架,包括.Net Framework一部分的EF和MVC就在CodePlex上,Git上則應有盡有,最著名的就是Mono。
不想做將軍的士兵不是好士兵,不想寫框架的程序員是屬于混日子的那種。這種程序員,即使做應用開發也不會專業起來。
我也沒寫過拿得出手的框架,所以不能說怎么寫,只能談怎么學習框架。概括就四個字:邊用邊學。
具體起來,分作五步吧,無數大牛就是從這五部曲走過來的:
1. 掌握基本語言特性。類屬性方法靜態繼承這些就算用不熟,至少能認出來。不用多說。
2. 找一篇好文章演練框架。這步很關鍵,一篇好文章就可以讓你熟悉一個相對較小的框架,比如StructureMap。對于一個復雜框架比如asp.net,一篇文章可以讓你完整認識一個方面,比如數據綁定。這個過程快則一天,慢則一周。
就我自己經驗來說,不喜歡按部就班按示例,我喜歡這里變點那里變點,其實我是好奇而已,費時間多一點不過值得。
.NET BCL發展到4.5,已經有點臃腫了,迫切需要瘦身了。幾百M幾萬個類,怎么可能死記硬背?知道引入哪個程序集,在哪個命名空間下能得到自己需要的API就好。
網上教程資源良莠不齊,而且很大一部分早已過時,對初學者來說,要找到這樣的好文章真的很難。本文最后,將附上一些我覺得適合快速入門,又提供擴展想象的優秀文章鏈接,個人視野有限,希望大家提醒,將不斷補充。
3. 在你的項目中應用,哪里不會就google,問同事,問社區。 邊用邊思考,這個API是否可以更方便,那里配置是不是用什么設計模式。初學乍練,我們經常并不是最恰當的方式用API,要有不斷重構優化的覺悟。
開發應用時,要想著某一天要做框架。有時間的話,可以研究一下框架的源碼。要注意不是研究其邏輯實現,重點在于其架構模式,以及跟其他框架、系統底層的交互,這是我們提高框架設計能力必備的。
不是做應用開發就不必了解設計模式,恰恰相反,做應用開發因為接觸得少,更需要主動了解設計模式,以免成日陷于業務海洋中成了磚家,專門搬磚蓋永遠蓋不到頂的業務大樓。而且有一些模式,應用開發中用的更頻繁。對于架構模式同理。
不要用一些“超前”的模式或架構,如果不懂它們也不要緊,因為你的代碼寫得不夠多,或者項目不夠復雜。要緊密結合自己的項目,如果自己工作項目規模不夠,可以研究開源。
昨天剛看到一個朋友,發文抱怨用EF時被Repository模式誤導。這一方面確實要歸疚于那些“大牛”,很多人都人云亦云,根本沒指出甚至都沒想過這個模式帶來什么樣的便利。另一方面,作者應該也吸取了教訓,不要隨便用你看不懂的東西,如果它確實有用,那就到你能領悟的時候再用。
關于此條和前一條,陳梓瀚的一篇“胡扯”可以看看。
4. 框架應用得日臻熟練,得心應手了。這并還不夠,世上沒有完美的框架。除了已死的框架,框架都是在不斷發展完善,要不斷學習框架的更新。如果你在應用的時候不斷思考,就不會覺得跟不上,因為更新帶來正好是期待已久的。
框架既然是不完美的,也一定有其生命周期。比如我們把WebService升級成WCF,就會大大提高擴展性,滿足更多更復雜的需求。要注意微軟有時候會出一些比較坑的框架,出一版就不再更新,比如Linq2SQL,所以至少要在第二版出來,功能性能大幅提高了再升級框架。
不少人說,技術更新太快跟不上,其實就是太懶而已。框架新功能開發速度,跟你應用的速度差了幾個數量級。
雖然我曾經列過20條死于重構的理由,但我知道一定嚇不倒前赴后繼的勇士。好了,其實大家有一個百死不回的理由-為框架升級而重構,天經地義。出了事情怎么辦,要么是框架的問題,要么是系統實在太爛,可以死得光榮瞑目了。
5. 在2、3、4步反復N次后,一個開發平臺的主要框架了然于胸,開始框架開發之旅。
可能開始是構造一個個小的應用框架,一定要很謹慎地限制的應用范圍,注意擴展性,免得以后難以維護。
不要重復造輪子,現有的框架可能有種種不足,但要想想你又不是鐵道部的,別人一定要有充分的理由才會換你的框架。
專業的程序員業余時間可以寫點休閑的代碼,但任何時候都要設法令自己參與框架更專業。
要有專業的命名,別圖省事或在命名上發揮創造力,要讓大家都能接受,學《.NET設計規范》。
要有專業的文檔,專業的注釋。
要有專業的API,設身處地地想別人如何用你的框架,要考慮其他人的習慣,要考慮在各種操作系統、開發平臺下的兼容性。
要用專業的標準,比如用W3C標準的Html,采用Unicode/Utf-8.而不是Ansi,不要別出心裁獨樹一職。
要有專業的分享,聽取別人意見,可以讓你的框架完善事半功倍,讓你的框架和能力得到認可。
最后,最最重要的是,要有專業的態度,持之以恒,不管投身于自己的還是開源框架。只要不斷努力,十年之后,你的名字一定會隨著你的框架被時代所銘記。
個人認為BCL中框架按使用頻率等,分為下面幾個表格,等待高手推薦的攻略,歡迎共享。先奉上一篇自己找到并翻譯的IoC框架StructureMap的文章。
一級框架:
| 框架名 | 速成攻略/指南 | 備注 |
| ASP.NET | ||
| WCF | ||
| IO | 包括Net IO | |
| ADO + EF | ||
| LINQ | ||
| Concurrent |
二級框架:
| 框架名 | 速成攻略/指南 | 備注 |
| xml | ||
| Reflection | ||
| Winform | ||
| WPF/Silverlight | ||
| Graphics | ||
| Workflow | ||
| MEF |
擴展和第三方框架:
| 框架名 | 速成攻略/指南 | 備注 |
| StructureMap(IoC) | StructureMap極速上手指南(翻譯) | |
| NUnit(Unit Test) | ||
| NHibernate | ||
| …… |
特別是千錘百煉的ASP.NET,經過了MVC/Razor/Web API的發展后,需要一個繼往開來的全新上手指南,如果實在找不到,很想自己寫一個,非常有挑戰性。還有蓬勃發展的Cocurrent編程,要總結一篇出色的攻略,需要有非凡的想象力。
學速成攻略,是降低工作壓力,提高生活質量的好途徑。不要擔心所謂軟件開發的內功,你以為是練九陰真經的白骨爪嗎?天下有奇遇練成上乘內功的有幾個呢?實際他們頂多是氣宗,我們是劍宗,到底孰強孰弱,金老先生早就給了我們答案。
新聞熱點
疑難解答