2011-10-30 99 views
9

除非我誤解 - 我在MVVM上閱讀的大多數文章都將MVVM中的模型解釋爲持有域/業務邏輯的部分,但讓我感到困惑的是MVVM是表示層模式並且表示層不全面掌握業務邏輯。有些人可以幫我理解業務層中的領域邏輯如何映射到表示層中的模型,MVVM中的模型實際上是一個DTO嗎? 我很感激,如果有人可以幫助解釋一個例子如何將業務層映射到SOA中的MVVM模型(業務邏輯位於Web服務之後)。謝謝。MVVM中的模型

+0

看到我的答案在這裏和人們賦予它的意見。我認爲MVC和MVVM經常被誤解,人們常常認爲模型和控制器正在取代DataModel和業務邏輯。在我看來,MVVM和MVC都只是在UI級別上,以便通過一些基本的實體操作或其他UI邏輯來保持UI組合的分離,所以我認爲我的答案適用於MVC和MVVM。 –

+0

對不起,我看不到任何網址,你能編輯並重新發布。謝謝。 –

+0

對不起,我忘了它:D http://stackoverflow.com/questions/7474267/mvc3-and-entity-framework/7474357#7474357 –

回答

1

與MVC一樣,MVVM只是一種分離表示形式,其目的是實現與UI的邏輯和狀態有關的應用程序部分與應用程序相關部分之間的關​​注點分離與業務領域相關的邏輯和狀態。因此,MVVM並沒有真正規定模型部分需要的表單,只要它與表示方面的問題分離即可。

該模型故意不以任何方式耦合或依賴於應用程序的表示方面,但除此之外還有許多不同的方法來實現三元組的「M」部分。特別是,它不必映射到單個對象:它可能意味着與返回DTO的服務交互,它可能意味着在消息總線上發佈和訂閱消息,或者它可能意味着檢索代表實體的域對象域,調用它們的方法,然後堅持它們。

MVVM模式的獨特之處在於ViewModel的角色,因爲它的目的是以具有豐富數據綁定功能的View技術可以使用的方式表示UI的狀態。如果沒有豐富的數據綁定支持,您可以使用不同形式的分離演示文稿,如MVC或MVP,但「M」部分仍然可以相同,因爲它根據定義獨立於UI技術。這是重要的因素。

0

很多時候Model是由ViewModel本身封裝的。在設計時,您必須將Model和ViewModel分開,它可以是單個ViewModel使用不同的模型。但真的這是一個罕見的情況,所以ViewModel可以直接使用服務。

如果單個ViewModel可以提供不同類型的模型,可以逐個替換 - 引入單獨的模型層,通過接口抽象它們並注入適當的ViewModel,否則View和ViewModel就足夠了。

1

MVVM中的模型根本不是DTO。 DTO是數據可傳輸對象。它更像實體類。它基本上用於將數據從一個層傳輸到另一個層;如表示層到業務層或業務層到數據訪問層。

而模型主要包含業務邏輯。表示層到視圖模型在需要時調用模型的業務邏輯。