2012-03-31 5 views
0

私はMVPパターンのいくつかの異なる例をチェックアウトしました。どちらが他のものを含んでいても、それは私には分かりません。名前としてMVPの包含の正しい方向は?

はそれを示唆している:

public MyPresenter(){ 
    display = new MyView(this); 
} 

または私の正気の論理(とMVPについてwikipediaページ)として

public MyView(){ 
    presenter = new MyPresenter(this); 
} 

または私はアプローチがこれらのオブジェクトを作成completly異なるものを使用する必要がありますか?

答えて

5

DOMはブラウザで最もコストがかかるものの1つで、GWTではウィジェットの作成にコストがかかります。それどころか、発表者は一般的に安価であるため、ごみ箱に入れて再建することができます。

これは、多くのプレゼンターでビューを再利用(シングルトンにしたり、数分間キャッシュする)することを経験則としてお勧めします。

これは、(短命の)プレゼンターがあなたの(長寿命の)ビューを参照する必要があることを意味します。

私は依存性注入を強く信じているので、別のものからインスタンス化することはありません。これはコンポーネントの寿命を管理する上で大いに役立ちます。それぞれのコンポーネントは互いに独立しています。
プレゼンターを作成し、プレゼンターを作成し、そのプレゼンターを作成(作成するか、キャッシュ)してプレゼンターに渡します。次に、プレゼンターを破壊し、次回に必要なときに再利用できるように(別のプレゼンターと一緒に)視界を維持します。

+0

+1ブラウザで高価なものを指摘するため。このことを念頭に置いて、私は自分のプロジェクトをより良く構築できると思う。私はGWTを開始しています。DIは私が学ぶ必要があるものです(私はデザインパターンについては知っていますが、フレームワークはありません)。私はgin/guiceをチェックします。 – Croo

2

MVPパターンを使用する主な理由の1つは、Presenterでロジックを分離して単体テストできるようにすることです。

あなたがこれを行う場合は、次の

public MyPresenter(){ 
    display = new MyView(this); 
} 

あなたが遅いGWTTestCaseを延長せずにあなたのプレゼンターをテストユニットすることができません。 だから私はずっと好む:

MYVIEWはMyViewInterfaceを実装
public MyPresenter(MyViewInterface view){ 
    this.view = view; 
} 

。インターフェイスは、実際のMyView実装、またはテストのためにGWTコンテキストを起動する必要のないテスト実装でプラグインすることができます。

関連する問題