面向對象設計模式原則01 單一職責原則(SRP)

單一職責原則(Single Responsibility Principle,SRP)又稱單一功能原則,這裏的職責是指類變化的緣由。設計模式

單一職責原則規定一個類應該有且僅有一個引發它變化的緣由,不然類應該被拆分。設計

以上是單一職責的基本概念,能夠看到兩句話中兩次提到了"變化的緣由"。面向對象設計模式

變化是軟件生命週期中持續存在的過程,也能夠說變化促進了軟件的發展,若是軟件再也不發生變化,那麼這個軟件就中止了發展。對象

從這個角度來講,變化是積極有益的。生命週期

可是變化也消極有害的一面,這主要體如今變化的過程當中對軟件中一些已有的、無需變化的部分形成干擾,從而對軟件產生結構性損害,形成軟件沒法正常工做。ip

若是軟件的全部部分都發生了變化,那使用設計模式是難以支撐的,這時須要考慮的不是「重構」,而是「重寫」。ci

若是軟件的全部部分都不發生變化,那使用設計模式是沒有意義的,這時須要考慮的是「效率」,而不是「擴展」。產品

麻煩的是軟件的某些部分變化而某些部分沒有變化,面向對象設計模式就是爲了解決此項問題而提出的。it

回到本文所講的主題——單一職責原則,這項原則強調的是「業務邏輯隔離」。效率

按照面向對象的思想,把每種業務邏輯看成一個「人」的話,那麼這些「人」就是有傳染病的「病人」。而咱們的軟件就是一所「傳染病醫院」。單一職責,就至關於對不一樣的傳染病類型的病人,隔離治療——劃分在不一樣的病區和病房。而防止病人之間的相互傳染。

但業務邏輯又與人不一樣,它是一種概念——無形的概念。

因此,想要對業務邏輯進行合理的隔離,就須要將業務邏輯之間的邊界「儘量清晰」的分隔開,可是很難作到「徹底清晰」的分隔。

分隔的粒度太細,那就會致使零散,而難以管理;分割的粒度太粗,又會形成變化與不變化的耦合。

所以只能儘可能尋找一個平衡點,使得業務邏輯的劃分粒度與業務邏輯的變化程度達到一種動態的平衡,

在每次業務邏輯發生變化的時候,當前的粒度的劃分可以把變化產生的風險維持在可控範圍內。

所以,想要經過使用此項原則來構建穩定可靠的軟件,除了要有較強的分析設計能力和相關重構經驗這些技術層面的能力,還須要對業務的變化有儘量準確的判斷,而軟件的業務又與市場的變化息息相關——這些非技術層面的能力,對於設計出優秀的軟件產品也是相當重要的。

合理的運用設計模式對軟件進行設計,應該是基於對市場的變化趨勢和業務的發展方向的「嗅覺」,而不是爲了運用模式而用模式,爲了重構而重構的「秀技」。

相關文章
相關標籤/搜索