## 連載:面向對象葵花寶典:思想、技巧與實踐(35) - NOP原則
**NOP,No?Overdesign?Priciple,不要過度設計原則**。
?
這應該是你第一次看到這個原則,而且你也不用上網查了,因為這個不是大師們創造的,而是我創造的:)
?
之所以提出這個原則,是我自己吃過苦頭,也在工作中見很多人吃過類似的苦頭。
?
你可能也見過這樣的場景:
產品提出了一個需求,設計師眼光非常長遠,他甚至把5年后可能的業務變化都提出來并且加以設計了,讓你不得不佩服設計師的高瞻遠矚的眼光,并且由衷的從心底贊嘆:牛逼啊!
?
但很快你就會發現,設計師是很牛逼,但你開發的時候就很苦逼了,設計方案巨復雜,工作量巨大,即使你發揚一不怕苦二不怕累的精神,每天加班加點奮斗了三個月終于做出來了,但你苦逼完了,測試跟著苦逼了:很多東西測試都沒辦法測試!
?
怎么會出現這樣的情況呢?我們做面向對象不就是為了應對變化、擁抱變化么?
?
要回答這個問題其實很簡單,孔夫子在《論語》中已經為我們解答了:“子貢問:‘師與商也孰賢?’子曰:‘師也過,商也不及。’曰:‘然則師愈與?’子曰:‘過猶不及。’”
?
什么事情過頭了就和沒有達到是一樣的效果,面向對象的設計也不例外。面向對象的初衷雖然是為了擁抱變化,但這個變化也是有一個度的,而不是預測得越長越好,原因很簡單:預測越長,預測的結果正確性越低!誰能在2000年預測SUN公司的衰落?誰又能在2005年預測蘋果的崛起?
?
除了預測時間越長準確性越差的問題外,過分設計會導致設計方案不必要的復雜、代碼量龐大,投入產出不成正比,項目計劃無法按時完成。。。。。。等等很多問題。
?
有時候過分設計比設計不足的影響和危害更大,因為如果設計不足,我們還有“重構”這個利器,也不會出現浪費大量人力物力的情況;
而如果過分設計,如果后面發現原來的設計不正確或者不合理,首先原有的投入浪費了,其次是即使重構,也需要花費更多的人力物力。
?
所以,在設計過程中要時刻謹記NOP原則,避免過度設計!
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版