面向?qū)ο笾皇沁@里面其中一種做法而已 。一個想要把程序編好的人 , 需要注重的是理解問題 , 然后嘗試做出幾種不同的抽象 , 評估各自優(yōu)缺點后得到一個當時可行解的能力 。而現(xiàn)有的大環(huán)境、教育體系 , 沒有那么多真實的、復(fù)雜的案例 , 只能用一些簡單的sample code來教授 。并且在說明問題本身時 , 簡化問題本身 , 而突出代碼設(shè)計的“模式” 。
這就好像是在用視頻教人游泳一樣 。學(xué)習(xí)者自己需要認識到這些培訓(xùn)只是個參考 , 玩真的還是要到項目里去體會 。即便是用面向?qū)ο笞龀橄笠矔袉栴} 。很多時候 , 面向?qū)ο缶幊滩⒉皇且环N好的“抽象” 。如果抽象做得好 , 透過抽象出來的“接口”就可以輕易的使用這個系統(tǒng) 。這時“大量的復(fù)雜性”被隱藏到接口后的實現(xiàn)里 。這就像是你看電視從來都不需要拆開殼子看里面液晶屏幕和視頻信號的轉(zhuǎn)換 , 只需要知道【電源】、【調(diào)臺】、【調(diào)音量】就能用 。
一個抽象做得好 , 往往要“deep” , 隱藏足夠的復(fù)雜度 。而面向?qū)ο蟮奈幕?教育往往會鼓勵程序員做很多無意義的 , 無性價比的抽象 ??纯从行┐a里完全不知所云的adaptor , factory , builder等就是這種做法的產(chǎn)物 。此外 , 在大量使用繼承作為設(shè)計方法時 , 也沒有起到任何實質(zhì)的隔離作用 。如果你嘗試擴展一個繼承體系 , 往往需要了解整個繼承體系才能寫對代碼——這時 , 復(fù)雜性并沒有被隱藏起來 。
你也許只是代碼寫的少了而已 。對于這種復(fù)雜度沒有降低 , 編寫代碼只是寫的少 , 但是要看懂還是得結(jié)合整個體系才能做到的方式 , 不是抽象 , 是“壓縮” 。壓縮只能少寫代碼 , 卻會讓系統(tǒng)更難以理解了 。也許不太容易理解壓縮在這里意思 。比如在一段被壓縮的數(shù)據(jù)中有3個bytes是“A” , “1” , “8” 。但是他們的意思可能是A連續(xù)出現(xiàn)18次 , 也許是A1連續(xù)出現(xiàn)8次 。
至于到底是哪個意思 , 必須從頭讀所有的數(shù)據(jù)才能弄明白 。編碼也是這個道理 。再說說類型本身 。一些面向?qū)ο缶幋a對類型的定義要求的比較嚴格 。其本質(zhì)假設(shè)是“如果一個Object的類型是XXXX” , 則其行為模式必然是“YYYY” 。但現(xiàn)實當中 , 一個Object的行為模式不光與他的類型有關(guān) , 還與這個Object“如何被使用”有關(guān) 。
比方說 , 一個User的Object , 如果是用戶自己看自己 , 就可以登陸、登出 , 修改昵稱;如果是其他普通用戶看 , 就只能看看看昵稱和頭像;如果是管理員來操作 , 可以reset密碼、注銷或者踢出登陸 。這時就得界定一個Scope , 來說明現(xiàn)在的User到底是哪個scope的User 。DDD的一些理念就源自于此——找到某個上下文的某個實體概念 , 不能有歧義 。
但是即便不用DDD , 也必須用各種變通的手段 , 把“如何用”的信息與類型信息結(jié)合到一起來實現(xiàn)邏輯 。很郁悶的是 , 這個“如何用”完全沒有章法 , 可能是“iOS App登陸“ , 也可能是“第一次下單時” , 或者是“系統(tǒng)處于降級狀態(tài)”時 。你永遠也猜不到下一次可能會有個什么條件是要納入到上下文的 。大家都知道大量用if不好 , 容易讓代碼變成麻花 , 無法維護 。
但面向?qū)ο缶幊瘫旧頉]解決這個問題 。很多文章提出面向?qū)ο竽硞€模式可以少寫if , 讓代碼容易維護 。但是這其實是建立在那個問題的上下文已經(jīng)明確的基礎(chǔ)之上 。上下文易變的問題沒有解決 , 換一個上下文 , 招數(shù)便不靈了 , 到時還得處理一坨“模式代碼” , 非常惡心 。最后 , 面向?qū)ο髸A向于將不同的代碼抽象為不同相互作用的Object , 但是有一些現(xiàn)實因素會讓這么面向?qū)ο蟮玫椒浅2焕硐氲男Ч喊踩?- 如果你的代碼要求非常安全 , 那么所有的Object都要耦合安全控制的代碼;要不就是在一層對外的接口之前攔截一道處理安全問題 , 內(nèi)部Object都無視安全問題 。
推薦閱讀
- qq英雄之刃怎么玩,用120HZ刷新率玩手游是一種什么體驗
- 坦克世界viv號怎么樣,玩坦克世界是一種什么體驗
- 常用的工具軟件有哪些,編程工具
- pthread,Pthread
- Python編程代碼,python編程代碼
- [上海交大]微型計算機組成原理,微型計算機原理
- 計算機行業(yè)職業(yè)道德個人體會,如何培養(yǎng)計算機行業(yè)職業(yè)道德
- Python編程從入門到實踐,python編程從入門到實踐
- 日本工業(yè)控制與自動化前沿,可編程邏輯
- 在線編程 題解,華為人才在線
