0

MVC パターンでは、データ モデルを構成するクラスと、システムを駆動するこれらのクラスのインスタンスとの間に違いがあります。私のチームは敬意を表して私に同意しません。明確にしたいと思います。

Employeeモデル内の唯一のクラスであるクラスがあります。コントローラーにはクラスのインスタンスが 1 つあり、そのインスタンスがビューを駆動します。

コントローラーが所有するクラスの 1 つのインスタンスを「モデル」と呼び、システムを駆動しないクラスEmployeeの他のインスタンスを「モデルではない」と呼びます。Employee

私がこの区別をする理由は、ビューがモデルを作成するべきではないと私のチームが主張しているからです。Employee同意しますが、ビューはクラスのインスタンスを作成してコントローラーに渡すことができるはずだと思います。

たとえば、コントローラーにメソッドがあった場合、ビューが新しいインスタンスを作成してコントローラーに渡すことsetCoworker(employee : Employee)はまったく問題ないと思います。Employee

MVC パターンのベスト プラクティスは何を指示しますか? ビューからインスタンスを作成するべきではありませんか?

4

3 に答える 3

3

従っているMVC パターンによって少し異なります (多くの種類があります)。ただし、一般に、ビューの唯一の責任は、人間の入力をコントローラーへの呼び出しに変換し、モデルが保持するデータ状態を人間への出力に変換することだけです。

だから私はあなたのチームに同意しなければなりません。を呼び出すボタンOnClickハンドラーなどがビューにある場合controller.BuildANewModel()がありますが、新しいモデルを独自にインスタンス化するビューはありません。

とは言っても、私が最後にチェックしたとき、ギャング・オブ・フォーは野球のバットとタイヤのアイアンを切っていて、パターンを文字どおりに守らない人々に平手打ちをする仕事をしていなかったので、うまくいくものは何でもあなたのために。. . :)

于 2013-07-19T01:58:11.113 に答える
2

私はあなたのチームに同意します:

依存関係を制限するために、ビューはコントローラーとその内部実装を認識する必要さえないため、作成された従業員をコントローラーに渡すことができません。
ビューが新しい従業員を作成する必要があることをコントローラーに通知する通知メカニズム (委任またはその他の疎結合メカニズム) が存在する必要があります。ビューはコントローラーに特定の入力またはイベントとコントローラーを通知します。新しい従業員を作成することを決定します。
ソリューションのビューとコントローラーでは、実際にはコンポーネント上にあると見なされる可能性があるため、密結合されます。MVC パターンは破棄されます。


MVC の略: モデルはデータを保持し、コントローラーはロジックを持ち、ビューはユーザーと対話します。両方を認識できる唯一のコンポーネントはコントローラーです。モデルはビューまたはコントローラーについて何も知りません。ビューはモデルについて何も知らず、コントローラーと非常に疎結合されているだけです。入力などについて通知するだけです。確かに他の構造を作成できますが、それはもはや MVC ではありません。あなたの質問はMVCについてでした。

これは Cocoa の MVC パターンについて説明しています。語彙はなじみがないかもしれませんが、多かれ少なかれ MVC はこのように見えるはずです。緑色はモデルとビューに関するコントローラーの知識を示し、黄色は異なる疎結合メカニズムを示します。それは、異なる言語やフレームワークでは異なると呼ばれる場合があります。

MVC

ここにあります: MVC パターンでモデルを所有する必要があるのは何ですか?

于 2013-07-19T01:58:46.010 に答える