軟件項目的設計是一個抽象的概念。它和程序的歸納形狀、結構以及每個模塊、類和方法的詳細形狀和結構有關。可使用許多不一樣的媒介去描繪它,可是它最終體現爲源代碼。最後,源代碼就是設計。函數
因爲需求並無按照初始設計的方式進行變化,從而致使了軟件的退化,改動都很急迫,而且進行改動的開發人員對原始的設計思路並不熟悉,所以,雖然對設計的改動能夠工做,可是他卻以某種方式違反了原始設計,隨着改動的不斷進行,這些違反漸漸積累,設計開始出現臭味。單元測試
敏捷團隊依靠變化獲取活力,不盡興預先設計,保持系統設計儘量的乾淨,簡單,並使用許多單元測試和驗收測試做爲志願,保持了設計的靈活性,易於理解性,利用這種靈活性,持續地改進設計,以便於每次迭代結束所生成的系統都具備最適合於那次迭代中需求的設計。測試
敏捷設計是一個過程,不是一個事件。它是一個持續的應用原則、模式以及實踐來改進軟件的結構和可讀性的過程。它致力於保持系統設計在任什麼時候間都儘量得簡單、 乾淨以及富有表現力。設計
在SRP中,咱們把職責定義爲變化的緣由。若是你可以想到多於一個的動機去改變一個類,那麼這個類就具備多於一個的職責。咱們須要分離耦合的職責,並對其持久化。對象
SRP是全部原則中最簡單的之一,也是最難運用的之一。咱們會天然地把職責結合在一塊兒。軟件設計真正要作的許多內容,就是發現職責並把那些職責相互分離。事實上,咱們要將論述的其他原則都會以這樣或者那樣的方式回到這個問題上。事件
軟件實體(類、模塊、函數)應該是能夠擴展的,可是不可修改的。開發
在許多方面,OCP都是面向對象設計的核心所在。遵循這個原則能夠帶來面向對象技術所聲稱的巨大好處(也就是,靈活性、可重用性以及可維護性)。然而,並非說只要使用一種面嚮對象語言就是遵循了這個原則。 對於應用程序中的每一個部分都肆意地進行抽象一樣不是一個好主意。正確的作法是,開發人員應該僅僅對程序中呈現出頻繁變化的那些部分作出抽象。 拒毫不成熟的抽象和抽象自己同樣重要。擴展