MVCまたはMVPアプリでビューとコントローラーを作成するためのパターンは何ですか?
-
06-07-2019 - |
質問
ドキュメントを編集するためのMVC / MVP GUIで作業しています。ドキュメントにはツリー構造があり、一部のノードはテキストを表し、他のノードは画像を表しています。アプリモデルにはコマンドスタックも含まれ、コマンドはモデル上で直接動作します。
異なるノードには根本的に異なるコントロールがあるため、各ノードに個別のMVC / MVPトライアドを実装することを計画しています。私が問題に直面しているのは、ピアVおよびCコンポーネントの作成と破棄を同期する方法です。
私のアイデア:
-各ノードで「childAdded」をリッスンします;イベントを入力し、それらのイベントに基づいてピアを作成します
-モデルでノードを作成するためにファクトリーを使用し、そのファクトリーでピアも作成します
動的ビュー/コントローラー生成の一般的なパターンやベストプラクティスは何ですか?
解決
このサイト
でいくつかのUIパターンを確認することをお勧めします特定の質問については、次のことを行います
ノードを表示するフォームは、INodeViewインターフェイスを実装します
INodeTreeFormインターフェイスの1つのメソッドは、個々のノードを追加する機能です。 NodeTreeScreenオブジェクトで作成されたNodeクラスを渡します。 2つの重要なプロパティがあります。最初はノードのキーで、2番目はノードのタイプです。
キーを持つコントロール上のフィールドがあるようにノードを追加します。
INodeTreeFormインターフェイスと共に、INodeViewインターフェイスがあります。これは、表示領域または切り替えるフォームをカバーします。
ノードをクリックすると、キーがNodeTreeScreenに渡されます。NodeTreeScreenは、ノードのタイプを確認する傾向があります。 INodeViewオブジェクトのコレクションがあります。 INodeViewのプロパティの1つは、ノードのタイプです。
正しいINodeViewを取得します。現在のINodeviewを閉じ、現在のINodeViewを取得したものに設定し、ノードに渡し、それ自体を表示するよう指示します。
INodeViewが何をするかを選択できます。異なるタイプごとにフォーム/コントロールを登録できます。たとえば、INodeViewText、INodeViewImageなど。または1つのオムニバスINodeViewFormのみで、INodeViewを実装するオブジェクトに実際の描画を処理させます。
GUIツールキットによっては、1つのフォームで多くの異なるインターフェイスを実装できることを意味する場合があります。
ノードの追加、削除、および作成に関しては、これはINodeTreeFormとNodeTreeScreenを実装するフォーム間の相互作用によって行われます。これにより、モデルを変更するために既に作成したコマンドを実行します。
インターフェースの背後にあるすべてのものを実装することにより、残りのソフトウェアを台無しにすることなく実装を変更できます。さまざまなインターフェースを実装するオブジェクトは、他のオブジェクトに影響を与えることなく、インターフェースを正しく実装し続ける限り変更できます。
これは、Martin Fowlerのサイトのパッシブビューの変形です。