質問

MVPパターンとWinformsを使用して、かなりの成功を収めています。ただし、MVPに関する質問が常にポップアップ表示されます。

発表者にとっての良い粒度とは

つまり、Winformsを使用すると、通常、きめ細かさがユーザーコントロールに非常に適しています。そうすれば、ユーザーコントロールを簡単に再利用し、より複雑なGUIを設計しながらビルディングブロックとして使用することができます。ただし、発表者と同じ(細かい)粒度を持っていることは問題のようです。

一方で、きめの細かいプレゼンターがあると、「プラグイン」を使用する機能が妨げられます。コントロールとDRYの原則に違反します。複数のプレゼンターは、多くの場合、複数のより複雑なコントロールで使用される同じロジックを実装する必要があります(たとえば、顧客のリストに入力します)。

一方、きめ細かい発表者は、さまざまな状況でコントロールを再利用する能力を制限しているようです。たとえば、編集ビューでは顧客をすぐに保存する必要がある場合があります。時にはそれを他の何かにリンクする必要があります。検証する必要がある場合もあります。等々。多くの場合、より複雑なコントロールに依存します。しかし、かなりの量の共有行動もあります。

どちらの場合も、1-presenter-1-viewが実現可能であることに注意してください。 「1ビュー」と見なされるもの変更。

MVPとWinformsを使用してプレゼンターの粒度を設定するためのベストプラクティスと通常考えられるもの

  • きめの細かいプレゼンターと、オプションまたはそのような性質を介したカスタマイズ可能な行動
  • 粗粒度のプレゼンターとプレゼンターの再利用性の低さ
  • 他に何かありますか

免責事項:主にSupervising Controllerを使用していますが、Passive Viewにも適用されると思います。長い質問も申し訳ありません。

役に立ちましたか?

解決

私たちはすべてのクライアントでMVPを使用していますが、これは間違いなく1回以上の会話です。クラスとプレゼンターの背後にあるコードはどれくらいきれいにすべきですか?そうは言っても、粗粒度プレゼンターアプローチを使用することを選択しました。基本的に、すべてのフォームには独自のプレゼンターがあり、ビューを使用して特定のフォーム上のコントロールのプロパティのみを取得および設定します。コンボボックスにデータを取り込むためのdbの呼び出しなどのコントロールの取り込みは、パブリックサービスクラスにあります。ユーザーが入力したデータの検証は、BOクラスに配置され、プレゼンターのいずれかまたはすべてが再利用できます。これがお役に立てば幸いです。

他のヒント

CAD-CAMシステムでは、プレゼンターはユーザーコントロールを使用しません。ユーザーコントロールは、プレゼンターが使用するビューインターフェイスを実装するEXEアセンブリにあるビューにあります。

顧客のリストを表示したい場合は、DisplayCustomerListを持つビューに渡し、顧客リストの表示に必要なユーザーコントロールの組み合わせを使用します。複数のビューが同じ方法で顧客リストを表示する場合、ExE / Viewアセンブリでそれらを実行するためのユーザーコントロールまたはクラスを共有します。そのクラスはそのアセンブリの外に出ません。

当社のソフトウェアは、さまざまな種類の金属切断機を実行するように適合されています。そのため、UIをリッピングして、完全に異なるUI(異なるマシンに対応)に置き換えることができるようにすることに重点を置いています。これらのUIはすべて、同じコアアセンブリのセットを参照します。

階層は次のようになります

EXEを表示 プレゼンターの実装 コマンドの組み立て-モデルを修正するプレゼンターがコマンドを実行します プレゼンターインターフェイス モデルアセンブリ

脇にあるのは、ロード可能なファイルタイプ、レポート、切断デバイスドライバーなどの動的コンテンツを定義するロード可能なアセンブリです。これらは、モデルアセンブリにあるさまざまなインターフェイスを実装しています

私がやっていることの1つは、すべてのダイアログに対してビュープレゼンターを押し付けないことです。ダイアログがコマンドと緊密にバインドされている場合、ダイアログはコマンドクラスとともに定義、作成、および使用されます。場合によっては、関連するコマンドのグループがダイアログを共有します(たとえば、ファイル処理)。

MVPを使用するときに私が尋ねる本質的な質問は、「フォームを別のフォームに完全に置き換えたい場合はどうなりますか?」です。その質問への回答は、特定のユーザーコントロールまたはフォームエンジンに依存しすぎている場所を特定します。

私のセットアップの最大の問題(そして、私が良い答えを得ていないもの)は、現在のIDEと言語がユーザーコントロールをデータベースレコードに非常に簡単に結びつけることです。他のセットアップと比較して生産性が高いため、設計を支配する傾向があります。 CAD-CAMアプリケーションでこの問題にあまり対処する必要がなかったので、データセットをビューに渡して処理できるようにする以外に答えがありません。 このサイトには、このような状況で役立つパターンがいくつかあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top