そのため、モデル ビュー コントローラー パターンで C#/Winforms アプリケーションを作成しています。私のビュー コントローラーは、オブジェクトの複数のグループをインスタンス化する必要があります。オブジェクト グループは、モデルの要素とビューの要素です。たとえば、テキストボックスとそのテキストボックスの背後にあるモデル。
これを行う最善の方法は、すべてをある種のコレクションに入れ、それらをキーで結び付けることでしょうか?
そのため、モデル ビュー コントローラー パターンで C#/Winforms アプリケーションを作成しています。私のビュー コントローラーは、オブジェクトの複数のグループをインスタンス化する必要があります。オブジェクト グループは、モデルの要素とビューの要素です。たとえば、テキストボックスとそのテキストボックスの背後にあるモデル。
これを行う最善の方法は、すべてをある種のコレクションに入れ、それらをキーで結び付けることでしょうか?
私が作成したWinFormMVCアプリでは、通常、コントローラーが何もインスタンス化することを許可していません(コントローラーに「new」キーワードを含めないようにしています)。
オブジェクトが必要な場合は、サービスに依頼します。内部的には、そのサービスがそのオブジェクトをデータソース(リポジトリなど)からフェッチします。新しいオブジェクトの場合は、何らかのファクトリを使用して新しいオブジェクトを取得します(必要な事前入力されたプロパティがすでにデフォルト値に設定されている、ルールが実行されているなど)。
この種の問題について私が考える方法は次のとおりです。ビューのGUIがなく、代わりにビューのコマンドライン入力がある場合、これをどのように機能させる(そして再利用可能にする)のでしょうか。モデルを作成/追加/削除/更新するロジックは、コントローラーではなく、ドメイン内のどこかにある必要があります。次に、コントローラーはモデルとビューの間のメディエーターになります。ビューは、コマンドラインインターフェイスのより美しいバージョンであるI/Oメカニズムになります。
それが理にかなっていることを願っています。
おそらく、ビューのニーズに合わせてモデルを設計する必要がありますか? その場合、コントローラーがビューに渡すモデルは 1 つだけになります。
WinForms の代わりに WPF を使用することを検討しましたか? より優れた MVC に似たモデルと、はるかに強力な組み込みのデータバインディングを備えています。それはおそらくあなたの問題を解決し、さらに最新のテクノロジーで構築するのに役立ちます.