質問
で これ 私が読んだテキスト
ただのコンポーネントに注意してください 栄光ある責任。ある コンポーネントは、 抽象化は、 制。それは何が起こるかわかりません ある瞬間に意味のある コンポーネントは実際には 1 つの 責任は自然に残されました。それ 責任は、 コンポーネント。
これは私を混乱させます。クラスが変更する理由が 1 つだけである場合、そのクラスの責任も 1 つであるべきように思えます。しかし今では、私はこれを狭く捉えすぎているようです。責任に基づくモデリングの文脈で、責任と変更の理由を何らかの形で説明できるでしょうか?クラスに 2 つ以上の責任があるにもかかわらず、変更する理由が 1 つある (またはその逆) ことはできますか?
解決
クラス-責任-コラボレーションモデリング(または設計)について読む
http://www.agilemodeling.com/artifacts/crcModel.htm
http://alistair.cockburn.us/Using+CRC+cards
http://users.csc.calpoly。 edu /〜jdalbey / SWE / CaseStudies / ATMSim / CRCmodel.html
http://c2.com/doc/oopsla89/paper.html
クラスにはいくつかの責任があります。常に単一の「もの」を表します。
「変更する1つの理由」ルールは責任には適用されません。期間。
「変更する1つの理由」ルールは次のように使用する必要があります。
-
「1」という意味ではありません。 「できる限り少ない」という意味です。
-
これは、「インターフェース」に適用されます。または「基礎となる抽象化」または「概念」クラス用。クラスはいくつかの概念をカプセル化する必要があります。コアの概念が変わると、クラスも変わります。
-
多くの単純なものは、いくつかの複雑なものよりも優れています。単純なものを再結合および変更するのが簡単です。
-
すべての複雑なものの中には、自由になろうとする多くの単純なものがあります。
-
「シンプル」を定義するのは難しいが、「1つのコンセプト」を定義する近くにあります。 「変更するもの」 " simplicity"の有用なテストでもあります。
-
最後に、「変更する1つの理由」文字通り" 1"を意味しません。
他のヒント
私の理解では、「コンポーネントに対する責任を美化する」ことの危険性は、責任をシステム コンポーネントに直接変換しないように注意する必要があることを意味します。
たとえば、電子メール システムでは、ユーザーは受信者にメッセージを送信することを目的としてシステムにアクセスする場合があります。これを可能にするのはシステムの責任です。
ユーザーは、電子メールを読んで返信するためにシステムに近づくこともできます。これを可能にするのもシステムの責任です。
しかし、これは、システム内に「新しい電子メールの開始」と「電子メールへの返信」という 2 つのコンポーネントが必要であることを意味するのでしょうか?いいえ。一般的な「電子メール作成」コンポーネントは、両方の要件を処理できます。
したがって、この場合、コンポーネント「電子メールの作成」は、ユーザーの目標である「新規メールの開始」と「メールに返信」を担当します。ただし、変更する必要があるのは、その中心となる概念 (「電子メールの作成方法」) が変更された場合のみです。
コックバーンの次のフレーズをもう一度よく見てください。「コンポーネントは、システム内で目的を持つ抽象化をキャプチャすることになっています。」目的 システム内で (変更する理由)は、ユーザーの目標(責任)を満たすという目的と同じではありません。
長い話を簡単に言うと、次のようになります。私の理解では、コンポーネントには理想的には 1 つの中心概念があります。それにはいくつかの責任があるかもしれません。しかし、私の見解では、1 つの責任が複数のコンポーネントに割り当てられることはありません。