|
之前寫過一篇如果你也是.NET程序員,收到不少留言,各種意見都有,之前的說話方式不夠友好,特此向因看過而心生郁悶的人道歉。
問題在于我為什么不停的提面向?qū)ο竽亍Uf來我并不是面向?qū)ο笫ネ剑艺嬲胝f的是“結(jié)構(gòu)化”的編程思想和代碼組織方式的培養(yǎng)和習慣,我說的結(jié)構(gòu)化是“有結(jié)構(gòu)的“,這樣的結(jié)構(gòu)包括但并不限于面向過程和面向?qū)ο蟆?/p>
這樣就有個問題,比如“我自己獨特的結(jié)構(gòu)”不也是”結(jié)構(gòu)化”嗎。Martin Fowler的重構(gòu)的里有說“任何一個傻瓜都能寫成計算機能理解的代碼。唯有寫成人類容易理解的代碼,才是優(yōu)秀的程序員”,代碼如果僅僅給計算機讀那怎么寫都無所謂,只要是正確的代碼總能執(zhí)行,但是我們的代碼是需要維護的,一般的代碼更多還是要讓人能輕松的讀懂,所以“自己獨特的結(jié)構(gòu)”只能自己看。所以話說回來,大家都知道的,比較流行的“結(jié)構(gòu)”包括但并不限于面向過程和面向?qū)ο筮@兩種方式。 然而就算是面向過程與面向?qū)ο筮@兩種, 就算是其中之一,你堅持了嗎?比如我的代碼到底是面向過程還是面向?qū)ο螅€是很混亂 就算無所謂,我的代碼能讓人輕松讀懂嗎?
面向過程或者面向?qū)ο蟮拇a就一定方便閱讀嗎?不管出于什么樣的原因業(yè)界流行這樣兩種。先是以C語言為代表的編程語言,以及面向過程的編碼方式,接著后來以Java語言為代表,面向?qū)ο蟮木幋a方式(我僅僅說的是代表,說的兩個方面), 我們在學校的學習以這些為基礎,工作中必然也是也這些為基礎交流。如果我們堅持面向過程,或者面向?qū)ο螅蜑槲覀兊某绦蚍奖汩喿x提供了前提。怎樣才能體現(xiàn)面向?qū)ο蠛兔嫦蜻^程這兩種其中之一呢。如果你一直以C語言編程,堅持面向過程編程中的一些原則,那么今后受過良好面向過程訓練的人就比較容易閱讀你的代碼了不是嗎。如果你以Java或者C#編程, 堅持面向?qū)ο笤O計與編碼的一些原則,不是為一個受過良好面向?qū)ο笥柧毜娜俗x懂你的代碼提供了方便嗎?
我為什么說面向?qū)ο竽兀课腋獣r候的是堅持“結(jié)構(gòu)化”,如果你能寫出優(yōu)秀的面向過程的設計也很好啊。如果你堅持用C#來做面向過程的開發(fā)也行啊,希望下個接替你位置的人也是用C#寫面向過程代碼的人吧。不過更多的是一個用C#寫代碼的人接受的是面向?qū)ο蠓矫娴挠柧殹S肅也可以寫出面向?qū)ο蟮脑O計啊,不知道有人看過ooc這本書呢,(這本書里介紹用C語言寫面向?qū)ο蟮拇a,弄的很復雜),應該有很多人不知道用static可以讓一個.c文件的變量,結(jié)構(gòu)和函數(shù)變成私有的吧。只是這樣,一個只進行了面向過程訓練的人能輕松看懂用C做的面向?qū)ο箝_發(fā)代碼嗎。 所以一個.NET小項目就不要面向?qū)ο罅藛幔f不定哪天因為功能擴展變成大項目了呢,更說不好將來維護的人根本就沒接觸過面向過程,就算一個小項目對他來說面向過程的一些做法也讓他看不到懂呢?
所以我為什么堅持要讓設計和代碼面向?qū)ο竽兀恳驗橛?NET本是是面向?qū)ο蟮拈_發(fā)庫,而用C#做開發(fā)的人很多都是面向?qū)ο蟮某绦騿T,所以為了方便交流我們不是應該盡量用面向?qū)ο蟮乃悸穪碜鲩_發(fā)嗎?而且面向?qū)ο蟮乃悸芬膊粌H僅是寫出容易閱讀的代碼,面向?qū)ο蟮母鞣N好處也不需要我說了吧. 從最開始寫機器碼,到匯編,高級語言,再到高級語言中出現(xiàn)面向?qū)ο笳Z言。面向?qū)ο髴撌悄芙鉀Q很多問題才出現(xiàn)的吧。
在這里弱弱反對一下“完全貫徹實用就好,能解決問題就行,給錢就行”的觀點,軟件工程師總需要有點信仰,有些堅持的吧,如果軟件不僅僅只是你混飯吃的工具的話,而且就算是工具,你也不能讓你的工具隨便讓人動不是嗎。 小小程序員的一點感慨,貽笑大方了。
it知識庫:為什么要面向?qū)ο竽?/a>,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。