2

私が見たMVCサンプルのほとんどは、このようにビューのインスタンスをコントローラーに渡します

public class View  
{  
Controller controller = new Controller(this);  
}

次のように、コントローラーが関心のあるプロパティとイベントのみへのアクセスを提供するクラスを渡すことに利点はありますか?

public class UIWrapper
{
private TextBox textBox;

public TextBox TextBox
{
get {return textBox;}
}

public UIWrapper(ref TextBox textBox)
{
this.textBox = textBox;
}


public class View
{
UIWrapper wrapper = new UIWrapper(this);
Controller controller = new Controller(wrapper)
}
4

2 に答える 2

1

アーキテクチャによって異なります。全員が同じ階層にいる場合は、ラッパーを使用しなくてもかまいませんが、おそらく View が実装するインターフェイスを Controller に渡します。機能的にも、結合の観点からも、インターフェイス アプローチとラッパー アプローチは同等です。

ただし、UI が 1 つの層にあり、コントローラーが別の層にある場合、View オブジェクト全体を渡す/シリアル化するのは扱いにくく、非効率的ですらあります。このような場合、DTO を前後に渡したいと思うかもしれません。これは、シリアル化がより簡単で、おそらくより効率的です。

私は DTO アプローチを好む傾向があります。アーキテクチャがスケールアップした場合、シリアル化と逆シリアル化を行うだけでよいからです。

また、View が複雑で、Controller とやり取りするデータが大量にある場合は、基本的に DTO であるIntroduce Parameter Objectを使用して、Long Parameter List の臭いと戦い始める可能性があります。

もう 1 つ気を付けなければならないことがあります。複雑なビューの場合、コントローラーは、ビュー内のさまざまなテキスト ボックスやその他の UI コントロールに大量のデータをマップする必要があります。同じことを逆にすると、View は多くのコントロールからデータを取得し、それらを Controller のさまざまなメソッドに渡します。

この2つを分けるのが好きです。私はビューに DTO を与え、各データのどこを「プラグイン」および「プラグアウト」するかを知るのがビューの仕事だと考えています。とにかくデータに関する限り、ビューとコントローラーの両方がDTOにのみ結合されています。

于 2008-09-18T00:01:42.123 に答える
1

MVC/MVP トライアドに関連して、 Jeremy Millerによる優れた一連の投稿があります。特に、ビューとコントローラー間の通信について詳しく説明しているパート 6に興味があるかもしれません。

于 2008-09-17T23:25:48.247 に答える