多くのユーザー コントロールで構成されたページがあります。このページのビュー モデルはかなり複雑です。
public class ComplexViewModel
{
public ObjectA ObjectAProperty { get; set; }
public List<Things> ListOfThings { get; set; }
public List<ThingCategories> ListOfThingCategories { get; set; }
public List<ThingTypes> ListOfThingTypes { get; set; }
public List<ThingOptions> ListOfThingOptions { get; set; }
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public OtherObject ObjectData { get; set; }
}
このページには、フィルタリング、ソートなどの情報を含む PostModel もあります。
public class SimplePostModel
{
public int ChosenThingCategoryId { get; set; }
public int ChosenThingTypeId { get; set; }
public int ChosenThingOptionId { get; set; }
public int ChosenThingFilterTypeId { get; set; }
public int ChosenThingSortTypeId { get; set; }
public int ChosenThingOtherId { get; set; }
public int ChosenThingMoreId { get; set; }
public int ChosenThingOMGId { get; set; }
}
単純な PostModel が検証された後、コントローラーは 3 つ以上のリポジトリを開き、それぞれに複数の呼び出しを行い、ビュー モデルを構築します。控えめに言っても、私のコントローラー アクションはかなり大きくなりました。
これは私が取り組んできた中で最も複雑なページであり、よりシンプルにする方法を決めるのに苦労しています.
私が最初に考えたのは、バインディングの検証後にリポジトリを呼び出して ViewModel を返すビュー モデル ファクトリを作成することでした。
次に、PostModel を検証し、ViewModel を 1 ステップでハイドレートするカスタム モデル バインダーを作成することを考えました。
私の質問は、複雑なビュー モデルをどのようにハイドレートするかということです。
これを書いているうちに、Html.RenderAction を使用して、ページという野獣を構成する各ユーザー コントロールのモデルを作成するというアイデアが浮かびました。
アップデート:
リポジトリは WCF サービスを呼び出し、アプリケーションはより大きな SOA アーキテクチャの一部です。