我有一个由许多用户控件组成的页面。此页面的视图模型相当复杂。
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。
所以我的问题是你如何水合一个复杂的视图模型?
在我写这篇文章的时候,我想到了使用 Html.RenderAction 并为构成这个页面野兽的每个用户控件创建一个模型。
更新:
存储库调用 WCF 服务,应用程序是更大 SOA 架构的一部分。