Applying UML and Patterns(第 2 版) の本を読み始めたところです。GRASP パターンの 1 つは Information Expert であり、モデル形式の MVC と同等ですか?
彼らは同じ責任を負っていますか(情報の保存と取得)?
Applying UML and Patterns(第 2 版) の本を読み始めたところです。GRASP パターンの 1 つは Information Expert であり、モデル形式の MVC と同等ですか?
彼らは同じ責任を負っていますか(情報の保存と取得)?
GRASP の Information Expert と MVC の Modelll は同じですか?
はいといいえ。
彼らは同じ責任を持っていますか(情報の保存と検索)?
いいえ。情報の専門家の資格は、情報の保存と検索に限定されません。より一般的には、「純粋な製造」と呼ばれる永続層によって行われます。
GRASP パターン (私は原則としてそれらを好みます) を使用して、どの責任がどのクラスに属しているか、またはこの責任が新しいクラスを必要とするかどうかを判断します。クラス レベルで設計を整理するのに役立ちます。一方、MVC はシステム全体の設計、つまりシステムをどのように分割するかについてです。通常、MVC の 3 つの部分にはそれぞれ複数のクラスが含まれます。
最初にアーキテクチャ パターンおよび/またはデザイン パターンが決定されます。次に、システムが実行する責任のそれぞれに GRASP の原則を適用します。
アプリケーションがあるが、クライアントが異なるフレーバーまたは UI でそれを望んでいるとします。データとビジネス ロジックは同じです。したがって、MVC は、モデルを分離してすべてのクライアントで再利用するのに適しています。
モデルには Customer クラスがあります。システムの役割の 1 つは、顧客に電子メールを送信することです。Customer
クラスは顧客に関する情報を格納するため、情報の専門家です。クラスにメールアドレスを保存しCustomer
、メソッドを追加しgetEmailAddress()
ます。「メールを送る」という責任をCustomer
授業に加えると、「結束力の高さ」に反します。そのため、「純粋な捏造」を適用EmailSender
して、メールアドレス、件名、メール本文を受け取る新しいクラスを追加できます。この例はばかげているように聞こえるかもしれませんが、これが私が思いつく最高のものです。
(MVCアーキテクチャでは、モデルにはコントローラーとビューが必要とするすべてのデータがあります。OPは、モデルをその観点から情報の専門家と考えていたと思います。)