[agile開發] OCP 關閉開發原則

如果程序中的一處改動導致一系列模塊的改動,那麼程序的設計就比較的僵化。重構就是必要的。理想的狀況是隻需要添加新的代碼而不需要改動現有的,或者極少。現在有一些策略可以幫助我們接近這個美好的目標。

關鍵是抽象,如果模塊依賴與一個固定的抽象,那麼其對未來的改變可以是關閉的。在設計模式中,stratege 和template method模式可以做到這一點。但是這裏的問題只有決定了對什麼或者說怎麼樣抽象,一邊應用我們的現有模式呢?顯然,未來的需求是很難預測的,想要一種對所有的改變都關閉的抽象似乎是不大現實的。所以我們必須要對模塊應該對那種變化關閉進行選擇。一般我們依據經驗或者請教領域專家可以做出取捨,一般選擇就是那些最有可能會發生的變化,進而進行貼切的抽象。不成熟的抽象--過度設計--往往會帶來額外的成本,而收益往往很少,當然你的目的是完美的設計,而不及成本也未嘗不可。

但是,變化時不可避免的。隨之而來的問題就是如何能對變化更早,更有效地做出反應呢?一是我們希望改變儘可能早的來到,而不是等到交給客戶的時候才發現;在一個就是碰到某種新的改變時,設計/抽象可能需要重構,這是必要的代價,但是重構後的抽象必須要能夠屏蔽掉以後同種類型的改變,也就是”只受一次愚弄”。

敏捷開發有一系列的指導原則幫助我們只受一次愚弄(至於如何進行抽象則是設計模式的事了):

1)首先編寫測試,使系統是一個可測試的系統。這樣可以更好的應對變化

2)使用很短的迭代開發週期

3)再加入基礎結構以前就進行特性開發,並且經常將這些特性展現給我們的“客戶”

4)首先開發最重要的特性

5)儘早的、經常性的發佈軟件。這樣我們可以更頻繁地把軟件呈現在“客戶”面前。

OCP在很多的方面都是面向對像設計的核心所在。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章