單一職責原則(Single Responsibility Principle)規(guī)定神得,每一個模塊/類都應該只負責實現(xiàn)某一個單一的功能舰攒,該功能應該應該由這個類完全封裝起來烦衣。也就是說一個類只做一件事。對于功能/職責的解釋攒岛,Robert Cecil Martin(單一職責原則的提出者)指出,可以理解為“改變的原因”胞锰。一個類或者模塊應該有且只有一個改變的原因灾锯。這樣,當需要修改某一個功能的時候嗅榕,不會影響另一個功能的實現(xiàn)顺饮。例如,當你的汽車的電子車窗出現(xiàn)了問題凌那,開去修理廠修理兼雄,當你去取車的時候,發(fā)現(xiàn)車窗修好了帽蝶,然而引擎壞掉了赦肋。當不同的功能耦合在同一個類中時,在需要修改某一功能的時候励稳,就有可能會出現(xiàn)這樣的情況佃乘。
職責劃分的精細程度也會影響到單一職責原則的執(zhí)行。因此驹尼,我們需要做到的是盡可能得將相近的/會為了相同原因發(fā)生改變的功能放在一起趣避,盡可能得將不同的/會為了不同的原因發(fā)生改變的功能分離開來。
Gather together the things that change for the same reasons. Separate those things that change for different reasons.
這其實是關于如何定義完整性(cohesion)和耦合性(coupling)扶欣。我們希望能夠提高那些會為了相同原因發(fā)生改變的功能之間的完整性鹅巍,降低那些會為了不同的原因發(fā)生改變的功能之間的耦合性。
We want to increase the cohesion between things that change for the same reasons, and we want to decrease the coupling between those things that change for different reasons.
然而料祠,在思考單一職責原則時骆捧,要謹記,最終是“人”提出的改變髓绽,而不同的人關注的功能是不同的(由他們的職責決定)敛苇。因此,我們不希望把這些代碼混在一起,讓所有人都迷惑不解枫攀,包括你自己括饶。
最后談一談單一職責原則的優(yōu)勢:
- 降低了類的復雜度(負責多項職責的邏輯會更復雜)
- 提高系統(tǒng)的可維護性
- 變更引起的風險降低(當修改一個功能時,可以降低對其他功能的影響)