次の UI コンポーネントを含むアプリケーションがあります。
- メインメニュー
- フォルダ ツリー
- クエリビルダー
- タブ付きリスト (各タブには、データ エンティティを表示できるグリッドがあります)
アプリケーションは MVC に基づいているため、上記の各コンポーネントにはコントローラーとビューがあります。
最初の 3 つのコンポーネントは、データ エンティティをリストに (新しいタブとして) 表示する必要があります。
- フォルダをダブルクリックすると、フォルダの項目が新しいリストに表示されます。
- クエリビルダーの検索ボタンをクリックすると、検索結果が新しいタブで開きます。
- 「開く...」メニュー項目をクリックしてファイルを選択すると、ファイル内の項目を含む新しいタブが開きます。
多くのアイテムが存在する可能性があるため、データベースからそれらをロードするプロセスはグリッドによって非同期に行われます (グリッドは、見ているときに満たされます)。
私の質問は次のうちどれが「よりクリーンな」デザインですか? (より良い解決策があれば、とても感謝します)
私が持っている最初の解決策は、 EventAggregator を使用し、「ShowQuery」イベントを定義し、リストコントローラーをそれにサブスクライブさせ、他のコントローラーがクエリ結果を表示したいときにそれを公開することです。
もう 1 つのソリューションは Unity コンテナーのようなもので、他のコントローラーから "IListsController" インターフェイスを解決し、"ShowQuery" メソッドを呼び出します。