單一職責(zé)原則 SRP,single responsibility principle
SRP是所有原則中最簡單的之一,也是最難正確運(yùn)用的之一,也是我們?nèi)粘V凶畛S玫囊粋€(gè)
不管是編碼,重構(gòu),甚至當(dāng)下流行的微服務(wù)中
在很多團(tuán)隊(duì)的規(guī)范中,都會(huì)聽到一條編碼規(guī)范:一個(gè)方法不要超過x行代碼
作為一群自命不凡的程序員,為什么在規(guī)范中卻有如此一條格調(diào)不對(duì)稱規(guī)范
主要問題就在于思維對(duì)SRP的缺失
微服務(wù)這個(gè)術(shù)語的一個(gè)問題是會(huì)將你的關(guān)注點(diǎn)錯(cuò)誤地聚集在“微”上。它暗示服務(wù)應(yīng)該非常小。很多團(tuán)隊(duì)在實(shí)施時(shí),也是往小了去考慮,偏移了核心目標(biāo)
微服務(wù)的目標(biāo)是將精心設(shè)計(jì)的服務(wù)定義為能夠由小團(tuán)隊(duì)開發(fā)的服務(wù),并且交付時(shí)間最短,與其它團(tuán)隊(duì)協(xié)作最小。
理論上,團(tuán)隊(duì)可能只負(fù)責(zé)單一服務(wù),因此服務(wù)絕對(duì)不是微小的
單一
從個(gè)人理解可以分為狹義與廣義
狹義:
狹義只是從面向底層實(shí)現(xiàn)細(xì)節(jié)的設(shè)計(jì)原則
一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因
在日常中,在編寫方法或者重構(gòu)方法,也是以這個(gè)為原則,即確保一個(gè)函數(shù)只完成一個(gè)功能。
在將大方法重構(gòu)成小方法時(shí)經(jīng)常會(huì)用到這個(gè)原則
廣義:
相對(duì)狹義,適用的范圍相對(duì)大些,不再是一個(gè)類,一個(gè)方法,亦或是一個(gè)原因
任何一個(gè)軟件模塊都應(yīng)該只對(duì)某一類行為者負(fù)責(zé)
“軟件模塊”不再只是一個(gè)類,可以是一組緊密相關(guān)的函數(shù)和數(shù)據(jù)結(jié)構(gòu),甚至一個(gè)獨(dú)立應(yīng)用服務(wù)
職責(zé)
什么是職責(zé)?如果一個(gè)類承擔(dān)多于一個(gè)職責(zé),那么引起它變化的原因就會(huì)有多個(gè)
在SRP中,職責(zé)定義為“變化的原因”,如果你能夠想到多于一個(gè)的動(dòng)機(jī)去改變一個(gè)類,那么這個(gè)類就具有多于一個(gè)的職責(zé)
因此對(duì)于職責(zé)的定義需要結(jié)合具體業(yè)務(wù),有時(shí)從感性上理解一個(gè)類的多個(gè)方法應(yīng)該拆分,但如果應(yīng)用程序的變化方式總是導(dǎo)致這幾個(gè)職責(zé)同時(shí)變化,那么就不需要分離
