2011-09-16 55 views
3

將域模型實體直接傳遞給UI層而不是相應的viewmodel可以接受嗎?將域模型業務實體傳遞給UI層問題

在我的例子UI得到一些用戶數據並將其傳遞到主持人與域名服務交互。域服務對來自用戶的數據執行一些操作,並將輸出結果作爲域模型實體返回給UI,通常應將其轉換爲視圖模型。

的問題是,根據用戶的選擇(Y或N)檢查返回的結果,它可以被返回到服務以用於進一步處理,最後保存到存儲庫。

如果我們不保存返回的域實體的2個步驟的,但畢竟使用視圖模型,我們將無法將其傳回作進一步處理。

是否有一些解決方法,當這樣的用戶交互發生?

回答

1

MVP圍繞View,PresenterModel的概念定義。沒有理由需要區分域實體和視圖Model。他們可以(也應該)是同一件事。

不像MVVM,模型起着少結合View一個角色。使用模型數據操縱視圖是演示者的負責任。在MVP中沒有像ViewModel這樣的概念。該術語通常保留爲MVVM,其中ViewModel是緊密耦合到View的實體,此外還有Model

+0

我會說,視圖模型,而不是模型視圖是MVVM更適合長期因視圖模型的耦合的觀點,即,它更多的是「視圖模式」比「模型視圖「 –

+0

對不起,我的意思是ViewModel,就像'Model'' View''ViewModel'一樣。 – TheCodeKing

+0

好的,我們如何在使用ViewmMdels的情況下繼續?我指的是「專業ASP.NET設計模式」書籍應用程序體系結構。如果它需要域模型實體的連續處理之間的用戶交互並且用戶獲取ViewModel,那麼該變通方法是什麼? –

1

我寧願建議將域模型中的presentation model從視圖模型(MVVM中)或MVC/MVP中的模型中分離出來,因爲在中等到高域複雜度中,您可以根據業務邏輯設計域模型以及面向對象的設計,它具有除演示數據以外的粒度級別,當您綁定或呈現數據時,您傾向於顯示域模型的一部分,並將某些對象展平爲演示文稿。

另一個方面是在開發分佈式應用程序時,有時需要通過服務(遠程外觀)暴露數據,因此最好以DTO的形式公開對象而不要暴露域模型,因爲DTO的方面仍然是不同於域模型的複雜性和粒度,不要強迫你的域模型被損壞以便表現友好或者消費者友好,並且不腐蝕你的表示模型和消費者使用面向業務的域模型並增加採用它們進行表示的複雜性。

+0

該模型與「專業ASP.NET設計模式」分離,但問題是如何處理UI交互,同時向用戶呈現DTO仍然沒有答案 –

+0

您可以考慮兩種類別的交互: 閱讀:這只是只讀返回要呈現給用戶的DTO的查詢。 寫:或更好的命名命令,這是隻寫命令,對域實體進行操作並執行邏輯。 嘗試將讀寫概念分開,這是各種CQRS體系結構。檢查(http://moh-abed.com/2011/09/13/pure-old-ddd-with-a-twist-from-cqrs/) –

+0

域層需要將ModelEntity傳遞給用戶進行調查。我們可以將它轉換爲DTO。然後用戶決定是否在域層進一步處理該實體。如果我們使用DTO,問題是在哪裏存儲ModelEntity以允許域層在用戶操作後進一步處理它?這樣做的模式是什麼? –