SRP(単一責任原則)は客観的ですか?


17

「ユーザーにとって魅力的な」デザインをデザインしたい2人のUIデザイナーを考えてみましょう。「ユーザーの魅力」は、客観的ではなく、デザイナーの心の中にのみ存在する概念です。したがって、デザイナーAはたとえば赤を選択し、デザイナーBは青を選択できます。デザイナーAは、デザイナーBとはまったく異なるレイアウトを作成します。

SRP(Single Responsibility Principle)について読みましたが、私が理解したのは、OOデザイナーから別のOOデザイナーまでさまざまな主観的な分析または責任の内訳です。私は正しいですか?言い換えれば、SRPプリンシパルに基づいて1つのシステムに対して2つの異なる設計を思いつく2つの優れたオブジェクト指向アナライザーとデザイナーを使用することは可能ですか?


4
どんな種類のデザイン(アート、エンジニアリング、...)にも客観性と主観性のバランスがあると思います-いくつかの明確なルールと制約、いくつかの経験と判断の呼び出し、そしていくつかの完全に無料のすべてのオプションお互いの選択肢。
Steve314

回答:


12

良い質問であり、よく私はよく検討していました。

客観的ではないと言うでしょう 間違いなく主観。問題を分解する方法は、そのタイプの問題に対するあなたの哲学に依存します。科学は、同じ問題を効果的に解決する多くの異なる方法があることを示しています。科学はまた、大陸を隔てた人々が独立して同じ解決策を考え出すことができることを示しています。いずれにせよ、「ベスト」という観点からソリューションを判断することは、あなたの基準に依存します。

実際、同じ全体の2つの部分として見られるものと、まったく異なる2つの概念として見られるものがあります。さまざまなコードライブラリのメンテナーが同じ問題にどのように取り組んでいるかを見ると、これが常に見られます。それでも、どちらのソリューションも問題なく機能します。

(PS。OPの最終質問が質問タイトルの反対を尋ねるので、この回答を編集しました。)


5

原則自体は客観的ですが、原則に従って何かを実装する方法は非常に多く、2人の独立した開発者はほとんど常に同じアプリケーションに対してかなり異なるシステム設計を考え出します。

同じ開発者が同じ設計を2回行ったとしても、少なくとも部分的に異なる2つのソリューションが考えられます。

システム設計が常に同じに見えるようにするための原則については、設計上の決定のあらゆる側面をカバーする必要があります。単一の責任プリンシパルは、システム設計の作成に関係する設計上の決定のほんの一部をカバーします。


良い分析@Guffa。+1。私はすべてを包括しないという考えが好きでした。ええ、SRPは、すべてを1つの問題の原因とするように指示するだけです。しかし、責任の境界がどこにあるかはわかりません。
サイードネアマティ

2

原則の適用は主観的です。しかし、「主観的」は、美学と同じように「好み」と同等ではありません。

明らかな極端があります。わずか数行のコードで、他のクラスを呼び出さないメソッドが1つだけのクラスは、間違いなく SRPに従います。一方、2つのメソッドを持つクラスは、1つは生のソケットを介した完全な電子メール実装を含み、もう1つはGUIフォームを構築しますが、SRPには確実に従いません

美学は貧弱な類推です。より良い類推は、カップリング結束というよく知られたコンピューターサイエンスの概念です。これらはどちらも白黒のtrueまたはfalse属性ではありません。ただし、定性的な要素があって測定可能です。経験豊富な開発者のグループに同じ機能の2つの別々のデザインを見せると、どのデザインがより多くのカップリングや凝集力を持っているかについて、同様の測定値が得られます。

実際、SRPは本質的に機能的な凝集です。あるモジュールの一部(クラスなど)は、同じ機能の実行に貢献するため、他の理由がないため、グループ化する必要があると述べています。「関数」は解釈の対象となる可能性があります-文字通りこれを単一の関数(またはメソッドまたはプロシージャ)宣言として解釈する人もいれば、少し戻って関数を「電子メールの送信」または「音楽の再生」と考える人もいます、しかし、操作する余地はまだあまりありません。 「ものの管理」は有効な機能説明ではありません。


0

「責任」は「変化する理由」として客観的に定義されています。プログラミングの時点では、変更する理由はすべて未来にあるため、プログラマーは経験と分野の知識に基づいて推測することしかできません。したがって、責任の分析は一種の予測であり、部分的に主観的です。


0

SRPは客観的です。実装は主観的です

まったく同じ機能を持つ2つの実装は、完全に異なる内部構造を使用する場合があり、その結果、クラスとメソッドが異なり、両方ともSRPを満たすことができます

それらが同じメソッドと状態を使用し、両方が正規化(最小/非冗長)されている場合、理論上は、SRPの下で同じクラスとメソッドになります。

しかし、私はそれを証明することはできません。まだ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.