2009-11-12 109 views
47

單一責任原則與分離關注分別有何區別?單一責任原則與分離擔憂的區別

+1

這一定是一個騙局。搜索每一個並閱讀答案。他們非常聯繫,經常一起討論。 – 2009-11-12 18:49:05

+0

我沒有看到任何蠢事 - 你有沒有想過?如果你能找到一個,我很樂意投票結束。 – 2009-11-12 18:50:55

+1

我似乎無法找到它,但我想在幾個月前回答了類似的問題。一些好的答案正在進入,沒有人似乎在找到愚蠢的東西,所以也許我只是瘋了。 – 2009-11-12 18:53:29

回答

23

單一職責原則(SRP) - 給每個班只有一個理由 變化;和「改變的原因」== 「責任」。在例如:發票 類沒有責任 打印自己。

分離問題(自1974年起)。 關注==系統的功能。服用 關心每一個關注點:對於每個 一個關注點,其他關注點是 無關緊要。隱藏實施 行爲。

here

12

Separation of Concern vs Single Responsibility Principle (SoC vs SRP)

從鏈接的文章:

分離關注(SoC)的的 - 是斷裂的計算機程序到可在功能儘可能少重疊的不同特徵的過程。一個問題是關於程序中的任何興趣或焦點。通常情況下,擔心與特徵或行爲是同義的。 http://en.wikipedia.org/wiki/Separation_of_concerns

單一職責原則(SRP) - 每個對象都應該有一個責任,那它的所有服務應與責任狹隘地對齊。在某種程度上,凝聚力被認爲是SRP的同義詞。 http://en.wikipedia.org/wiki/Single_responsibility_principle

+3

與這些定義,其中水平凝聚力被認爲是單一責任原則的同義詞?我搜索了有很多凝聚力水平(從低到高):重合,邏輯,時間,程序和功能......在這個解釋中它是否意味着只有「功能凝聚力」? – limonik 2015-09-02 17:54:32

9

單一責任聲明一個對象負責單個工作單元。

問題的分離意味着應用程序應該被拆分爲功能重疊儘可能少的模塊。

類似的最終結果...稍有不同的應用程序。

+0

對象和模塊有什麼區別?對我來說,一個模塊是一個類,一個對象是一個類或者一個類的實例 – Rookian 2009-11-12 19:03:48

+0

一個模塊可以是一個應用程序中的一個類似功能塊......由多個類之間的交互組成(每個類具有單一責任如果您遵循單一責任模式)。 – 2009-11-12 19:13:49

9

在我看來,單一責任原則是實現問題分離的工具/成語之一。

+3

什麼?人們可以很容易地創建一個具有非重疊功能(SRP)的應用程序,該應用程序包含許多非獨立顧慮(!SOC)的對象。 – 2009-11-12 18:51:11

+3

但要成像一個具有多重責任但仍然遵守關注點分離原則的對象是困難的。換言之,要實現真正的問題分離(在所有級別上),最好遵守單一職責原則 – BostonLogan 2009-11-12 18:58:26

2

分離關注是一個過程;單一責任原則是一種設計/建築理念。它們並不完全脫節,但它們有不同的用途。

2

類似但是:SoC涉及到關注點:爲了將複雜問題分解成幾個問題,SRP只有一個責任。

5

單一責任原則與問題分離真的是一回事。

當然,你可以在學術討論中陷入困境,試圖梳理出兩者之間的某種區別,但是爲什麼?對於所有的意圖和目的,他們都描述了同樣的事情。最大的問題是人們如此深深地想知道「關注」和「責任」究竟是什麼,他們可能錯過了SRP和SoC背後的重要思想。

這個想法很簡單,就是把你的代碼分割成鬆散耦合的隔離部分。這允許多個開發人員在不影響對方的情況下工作在不同的部分,還允許單個開發人員修改一個隔離部分而不會破壞另一部分。

這適用於模塊級別,例如MVC是一種促進SRP和SoC的架構模式。代碼庫被拆分成獨立的模型,視圖和控制器。這樣,視圖的修改可以獨立於模型完成。兩個人並不可怕地交織在一起。

在較低的水平上,這也應該適用於類。不要將幾十種方法放在一個類中,而是將代碼拆分爲幾個。出於同樣的原因。

即使在方法級別,也可以將大型方法拆分爲更小的方法。

原則上。 SRP是一個原則,而不是一個規則,所以你不必(看過:不能/不應該)虔誠地遵循它的極端。例如,這並不意味着每個課程只有一個七線方法。這僅僅意味着將代碼拆分成孤立部分的一般原則。關鍵是它會導致更好的代碼庫和更穩定的軟件。

2

SRP和SOC工作在不同的抽象層次上。目的是在兩種情況下減少耦合並增強內聚力。雖然SRP更多地處理對象級別,但SOC也可能在功能級別上實現。一個函數可以由一個對象實現,但也可以由多個對象實現。因此,兩種原則的耦合和凝聚力可能不同。

5

問題分離(SoC)。將您的應用程序劃分爲不同的功能,儘可能少的功能重疊。 (微軟)。

「關注」 =「特色鮮明」 =「不同部分」

「值得關注」的作品在高和低的水平

單一職責原則狀態,每一個模塊或類應該對軟件提供的功能的單一部分負責,並且該責任應該完全由該類封裝。它的所有服務都應該與責任完全一致。 (維基百科定義)

「責任」=「改變原因」改變什麼? 「由軟件提供的功能單一零件」 = 基本單元

結論

  • 單一責任原則適用於基本單元 - >工作在較低水平

  • 分離的擔憂在高和低的水平上都有效

  • SRP和SoC一起工作分離關注的問題。他們是
    完全一樣處於較低水平

+0

SRP也適用於不同級別,您在圖書館級別具有更普遍的責任性,在課程級別更具一般性責任性,功能級別。 – Phil1970 2016-12-15 20:57:06

1

我想提請關注(SoC)的分離和單一職責原則(SRP)之間的比較。

差異

  • 的SRP是在類層次,但SOC處於每個計算機程序的,抽象...或有時架構層。

  • SRP是關於如何將您的域劃分爲只有一個責任(改變原因之一)的粘性類的質量。另一方面,SoC是將上下文分隔爲不同部分的設計原則,因此每個部分都需要解決一個單獨的問題(不是如何),因爲有很多工具(例如類,函數,模塊,包等)。 ..)達到這個目標不同的水平。

  • SRP的概念是基於凝聚力(高凝聚力),而SoC接近分子,分而治之(D & C),...在每個抽象層次上。

  • SoC是應對複雜性的一個很好的設計原則,比如抽象,而爲了達到單個負責任的類,您可以使用SoC原則作爲一個很好的解決方案。因爲,知道一個班級有多個責任的方法是,如果你能從這個班級中提取另一個責任(關注)。

相似

  • 每個應用這些原則後,你的背景下變得更加可重複使用,維護,健壯,可讀性,...。