2012-04-15 7 views
1

私は、wikiで説明されている一般的なMVCパターンについて話しています。その厄介なピンクの絵が私を壊す。私は別のものを見てきましたが、間接的な関係を持つものは常に私を困惑させました。 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controllerMVCの間接的な関連

なぜビューはコントローラと間接的に関連していますか?

ビューは、モデルに基づいています - 協会は

2直接的である。しかし、なぜモデルはビューとの間接的な関連を持っている理由は何ですか?それは知る必要のないビューの存在についても知らないのですか?

私は、Javaサーブレットと春のMVCで開発し、私はそれがMartin Fowler氏によって説明した他の言語に過去に戻っていることを感じている比較的新しい開発者です。 Spring MVCでは、私は間違いなく間接的な関連付けがなくても、常にコントローラを結合リンクとして使用します。

私はわずか3年前にプログラミングを始めました。だから私はいつも適切にやっているというアイデアで育っていました。たとえば、モデルがまさに正確であるところのn層とMVCを組み合わせると、まったく間違って非効率なビジネスロジックを過去にモデルに格納するのはなぜでしょうか?パラメータとゲッター+セッターとMVC全体それはもともと意図されていたか、それともそうではなかったのでしょうか?私たちは、DAO +サービスレイヤーでDAOS +のロジックをカプセル化していますが、それはどのようにモデルに関係していますか?

私の典型的なモデルでは、私はそれを正しく使用しています(私は現時点ではORMを使用していない)の伝統的な「学生」または通常、データベース内のテーブルに似ている「カー」クラスよりもより複雑ではありませんか? DTOはどのようにモデルに関連していますか?

答えて

1

1ビューは、コントローラとの間接的な関連を持っているのはなぜ?

コントローラは、モデルに行動要求を仲介する責任があります。これは、要求が1つのオブジェクトにのみ影響する単純な「名前の変更」ではなく、モデル内に保持されているいくつかの共同オブジェクトを変更する傾向があるためです。コントローラがモデルへのアクセスを分離することにより、ビューを使用してモデルを変更することが可能になります(ビューではなく、モデルオブジェクトのロット自体が変更されます)。

Viewオブジェクト(クラスボタンの例えばインスタンス)が直接コントローラオブジェクトを理解していないので、それは間接的関連付けです。後で接続を適用する必要があります(onclickコールバックなど)。

ビューはモデルに基づいています - 協会はこれは正確ではありません

直接的である理由です、直接の関連は委任リンクを表します。ビューは、委譲する必要のあるモデルオブジェクトとは完全に別のオブジェクトです。

委任には、対象オブジェクトの理解が必要なため、直接的な関連付けが必要です。 Viewオブジェクトによって情報が必要な場合、情報の収集はModelオブジェクトに委譲され、Viewに戻されて処理が続行されます。

2しかし、なぜモデルはビューとの間接的な関連を持っていますか?それは知る必要のないビューの存在についても知らないのですか?

あなたのViewオブジェクトはモデルから情報を「プル」する必要がありますが、これは実用的ではないかもしれません。ModelとViewの間の間接的な関連付けは、Modelオブジェクトが変更されたときにViewオブジェクトへのコールバックを表します(Observer Patternをチェックしてください)。これにより、モデルとビューの間の接続が「プッシュ」に変わります。

関連する問題