目前,我得到了相當不好的視圖模型。如何處理具有多個聚合根的視圖模型?
類看起來像這樣=>
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