TabControl を使用して UserControl を格納する WinForms (.NET 4) アプリケーションをリファクタリングしています。UserControl は各 TabPage でインスタンス化され、最終結果は各タブのエディターになります。これらは、フォーム全体で編集されているオブジェクトに最終的にフィードされるアイテムのコレクションを編集しています。
クラス構造の例として:
class School
string Name
string Address
Course
それぞれにいくつかの適切なフィールド (Department
、Name
など)がある のコレクション
(実際には学校関連のアプリケーションではありませんが、メタファーは機能します。)
視覚的には、UserControls のセットがCourse
es を管理し、親 Form がSchool
情報を処理します。
現在、Form/School のプレゼンターと UserControl/Course のプレゼンターがあり、それぞれにビューがあります。ただし、学校のプレゼンターは、コースの一部の情報を制御する必要があります。たとえば、あるコースで選択されたオプションは、他のコースのオプションを制限します。モデルはそのSchool
計算を処理していますが、コースのプレゼンターに到達する必要があります。
MVP の議論でこの種の関係の例を見つけることにあまり成功していません。MVP のアプローチを取るのはこれが初めてです。これを処理するための適切なオプションは何ですか? 学校のプレゼンターがコースのプレゼンターのコレクションを持ってセットを表すことは適切ですか? 学校のビューは、コースのビューのコレクションを保持する必要がありますか? (最終的な UserControls は、最終的に何らかの方法でフォームに接続する必要がありますよね?)
私の主な目標は (当然のことながら) テスト容易性と保守容易性を高めることであり、これまでのプロセスの主な情報源は、Michael Feathers の「The Humble Dialog Box」と Jeremy Miller の「Build You Own CAB」シリーズです。