目前,我得到了相当不好的视图模型。如何处理具有多个聚合根的视图模型?
类看起来像这样=>
public class AccountActionsForm
{
public Reader Reader { get; set; }
//something...
}
问题是,阅读器类型来自域模型(违反SRP的)。基本上,我正在寻找设计技巧(即将视图模型分解为输入/输出是一个好主意?)如何使我的视图模型无摩擦和开发人员友好(即 - 映射应该自动工作控制器基类)?
我知道AutoMapper框架,我很可能会使用它。
因此,再次尝试创建正确的视图模型时常见的问题是什么?如何构建它?如何在需要多个域对象输入时完成映射?
我对查看需要来自多个聚合根的数据的情况感到困惑。我正在创建应用程序,其中包含图书馆,阅读器,书目记录等实体。
在我的情况下 - 在域级别,将所有这3种类型分组到LibraryReaderThatHasOrderedSomeBooks
或什么都没有意义,但查看应显示列表为特定图书馆中的特定读者订购图书需要全部。
所以 - 它似乎罚款来创建OrderedBooksListModel
视图模型视图OrderedBooksList
下保存LibraryOutput
,ReaderOutput
和BibliographicRecordOutput
视图模型。甚至更好 - OrderedBooksListModel
视图模型,它利用flattening technique并拥有道具一样ReaderFirstName
,LibraryName
等
但是,因为有多个输入导致映射问题。
这不是1:1的关系,我只踢一个聚合根。
这是否意味着我的域模型是一种错误?
那么纯粹在UI层上生活的视图模型字段(即枚举,表明检查选项卡)呢?
是this大家在这种情况下做了什么?
FooBarViewData fbvd = new FooBarViewData();
fbvd.Foo = new Foo(){ A = "aaa"};
fbvd.Bar = new Bar(){ B = "bbb"};
return View(fbvd);
我不愿意这样做=>
var fbvd = new FooBarViewData();
fbvd.FooOutput = _mapper.Map<Foo,FooOutput>(new Foo(){ A = "aaa"});
fbvd.BarOutput = _mapper.Map<Bar,BarOutput>(new Bar(){ B = "bbb"});
return View(fbvd);
好像很多写作的。 :)
Reading this此刻。和this。
好的。我想过这个问题有很多,是的 - 增加一个抽象层似乎是一个解决方案=>
alt text http://i46.tinypic.com/fe14qp.jpg
所以 - 在我的脑海这个已经工作,现在是时候为一些玩弄。
TY吉米
希望看到你回答这个问题,你应该知道(http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/01/04/ui-automation-tools-snake-oil.aspx)。对于这个问题的回答只是成功开发好的和可靠的UI测试(并准备Mvc2模板嗡嗡声)的另一块砖块,我的实际目标是什么。当我回家时,我会尽量总结整个想法 - 然后在你的答案下张贴另一个“ping”评论以获得一些回应。 :) – 2010-01-11 15:05:20