目前,我的视图模型非常糟糕.
类看起来像这样=>
public class AccountActionsForm
{
public Reader Reader { get; set; }
//something...
}
Run Code Online (Sandbox Code Playgroud)
问题是Reader类型来自域模型(违反SRP).
基本上,我正在寻找设计技巧(即将视图模型拆分为输入/输出是一个好主意吗?)如何使我的视图模型无摩擦和开发人员友好(即 - 映射应该使用控制器基类自动工作) ?
我知道AutoMapper框架,我可能会使用它.
那么,再一次 - 在尝试创建正确的视图模型时常见的问题是什么?如何构建它?当需要多域对象输入时如何进行映射?
当视图需要来自多个聚合根的数据时,我感到困惑.我正在创建app,其中包含Library,Reader,BibliographicRecord等实体.
在我的情况下 - 在域级别,将所有这3种类型分组到LibraryReaderThatHasOrderedSomeBooks或什么不是没有意义,但是应该显示特定库中特定读者的有序书籍列表的视图需要它们.
所以-它似乎好创建视图OrderedBooksList与OrderedBooksListModel视图模型下保存LibraryOutput,ReaderOutput并BibliographicRecordOutput视图模型.甚至更好- OrderedBooksListModel视图模型,它利用平整技术和拥有的道具一样ReaderFirstName,LibraryName等等.
但这会导致映射问题,因为有多个输入.
它不再是1:1关系,我只踢一个聚合根.
这是否意味着我的域模型是错的?
那些纯粹存在于UI层的视图模型字段(即指示已检查选项卡的枚举)呢?
就是这是什么每个人都在这样的情况?
FooBarViewData fbvd = new FooBarViewData();
fbvd.Foo = new Foo(){ A = "aaa"};
fbvd.Bar = new Bar(){ B = "bbb"};
return View(fbvd);
Run Code Online (Sandbox Code Playgroud)
我不愿意这样做=>
var fbvd …Run Code Online (Sandbox Code Playgroud)