単一責任の原則と関心の分離の違いは何ですか?
13 に答える
単一責任原則(SRP)-各クラスに変更する理由を1つだけ与えます。および「変更の理由」==「責任」。例:請求書クラスには、それ自体を印刷する責任はありません。
関心の分離(1974年以降)。懸念==システムの機能。それぞれの懸念に対処する:それぞれの懸念について、他の懸念は無関係です。動作の実装を非表示にします。
ここから。
単一責任の原則と関心の分離は、実際には同じものです。
確かに、この 2 つの違いを明らかにしようとする学術的な議論に行き詰まる可能性はありますが、なぜでしょうか? すべての意図と目的のために、それらは同じことを説明しています。最大の問題は、人々が「懸念」と「責任」とは何かを正確に知りたいという欲求にとらわれすぎて、おそらく SRP と SoC の背後にある重要なアイデアを見落としていることです。
そのアイデアは、コードベースを疎結合の分離された部分に単純に分割することです。これにより、複数の開発者が互いに影響を与えることなく異なる部分に取り組むことができます。また、1 人の開発者が別の部分を壊すことなく、1 つの分離された部分を変更することもできます。
これはモジュール レベルで適用されます。たとえば、MVC は SRP と SoC を促進するアーキテクチャ パターンです。コードベースは、分離されたモデル、ビュー、およびコントローラーに分割されます。そうすれば、モデルとは独立してビューの変更を行うことができます。2 つ 2 つが恐ろしく絡み合っているわけではありません。
下位レベルでは、これはクラスにも適用する必要があります。1 つのクラスに多数のメソッドを配置する代わりに、コードをいくつかに分割します。同じ理由で。
また、メソッド レベルでも、大きなメソッドを小さなメソッドに分割します。
原則として。SRP は規則ではなく原則であるため、極端に宗教的に従う必要はありません (読む: できない/すべきではない)。たとえば、行き過ぎて、各クラスに 7 行のメソッドが 1 つしかないという意味ではありません。これは、コードを分離された部分に分割するという一般原則を意味します。ポイントは、より良いコードベースとより安定したソフトウェアにつながるということです。
リンクされた記事から:
関心の分離(SoC) –コンピュータープログラムを、機能の重複をできるだけ少なくする別個の機能に分割するプロセスです。懸念事項は、プログラムの関心や焦点です。通常、懸念事項は機能または動作と同義です。 http://en.wikipedia.org/wiki/Separation_of_concerns
単一責任原則(SRP) –すべてのオブジェクトには単一の責任が必要であり、そのすべてのサービスはその責任と厳密に連携している必要があります。あるレベルでは、凝集度はSRPの同義語と見なされます。 http://en.wikipedia.org/wiki/Single_responsibility_principle
私の意見では、単一責任原則は、関心の分離を達成するためのツール/イディオムの1つです。
単一責任は、オブジェクトが単一の作業単位に責任があることを示します。
関心の分離では、アプリケーションを、機能の重複ができるだけ少ないモジュールに分割する必要があると述べています。
同様の最終結果...わずかに異なるアプリケーション。
関心の分離はプロセスです。単一責任の原則は、設計/アーキテクチャの哲学です。それらは完全にばらばらではありませんが、異なる目的を果たします。
似ていますが、SoC は懸念事項に関連しています。複雑な問題をいくつかの懸念事項に分解するために、SRP は 1 つの責任しか持たない必要があります。