3

與nTier體系結構通常創建數據,業務,工作流和UI層。在這種設置中,您的數據層和業務層是分開的,可以被其他層重用。ASP.NET MVC vs. nTier分離問題

在ASP.NET MVC中,似乎該模型既充當業務層又充當數據層,顯然模型是數據,所有文檔都指示業務邏輯屬於模型。

當這兩個圖層混合在一起時,這種架構如何促進良好的問題分離?

回答

4

視圖模型和域模型之間有區別。域模型是您的應用程序域。這些模型可以在任何層次的任何地方使用,並且通常放置在單獨的共享項目中。您的視圖模型僅適用於用戶界面。他們依賴於你的頁面需求/結構。假設您要創建用戶管理頁面,那麼您的視圖模型可能是一個具有2個屬性UserList<Role>的類,其中UserRole是域模型。

最後,您的數據模型通常只是數據庫傳輸對象。實體框架模型通常同時用作數據和域模型。


所以,回答你的問題:你自己選擇你的舒適水平的混合模型。問題是,如果你不想混合,那麼你將在整個解決方案中有很多模型重複,你必須手動從一種模型映射到另一種模型,或者藉助像AutoMapper這樣的庫。這就是開發人員選擇一些折中的原因。

0

安德烈M是現貨。我同意View模型和領域模型之間的區別。這可能有助於將MVC中的M視爲您的觀點的模型,而這些「視圖模型」應該不知道他們從哪裏獲取數據。其中存在關注的分離。控制器將代理您的域模型和視圖模型之間必要的交換,以便用數據填充視圖模型。這些數據交換通常通過使用另一個層(如存儲庫,基礎結構或服務層)來實現控制器代理,但不一定是這樣。在一個項目解決方案中,您的「模型」文件夾可能包含域模型,然後您可能會有一個名爲「ViewModels」的單獨文件夾。控制器將通過「模型」獲取數據,然後使用從模型「接收」的數據填充視圖模型。視圖模型將成爲您的強類型視圖的基礎模型。有人可能會問,爲什麼如果開發人員在域對象和視圖之間存在簡單的一對一映射時,甚至可能會使用視圖模型。一個例子是你可能需要「扁平」一個域對象及其關係。另一個例子可能是,對於索引或列表頁面,您可能需要包含搜索過濾器;查看模型大大簡化了對需求的更改。

1

模型 - 視圖 - 控制器(MVC)是用於實現用戶界面一個軟件架構模式。它將給定的軟件應用程序分爲三個相互關聯的部分,以便將信息的內部表示與信息呈現給用戶或從用戶接受的方式分開。 (Wikipedia

我們應該考慮到,當我們談論ASP.NET MVC,我們所談論的「用戶界面」,因此,它是一個用戶界面框架不是一個應用程序之一。在MVC中,關注點分爲三個部分:模型,視圖和控制器。

在多層或多層體系結構中,擔憂主要在Presentation,Application,Business和Data訪問層中分離,這是應用程序框架體系結構,ASP.NET MVC屬於Presentation層。總而言之,如果我們區分應用程序和表示框架,完全可以實現關注點分離。