Asp.net-Mvc
模型在 MVC 中的作用是什麼?
我已經閱讀了幾篇關於 MVC 的文章,但有一件事我不清楚。模型在實際中的作用是什麼。
模型是否代表業務對象?或者它只是一個幫助將資訊從控制器發送到視圖的類?
以兩個業務類為例(從數據庫填充的數據)
Class Image Property FileName As String Property CreatedBy As User End Class Class User Property UserName as String End Class將“圖像”作為模型還是我應該創建一個新類?
在模型中,我應該創建一個從 User 對像中獲取數據的 UserName 屬性嗎?
Class ImageModel Property FileName As String Property CreatedBy As User ReadOnly Property UserName As String Get Return User.UserName End Get End Property End Class
對此有很多觀點,但根據我的經驗,有兩種主要觀點
Model:視圖模型
這是一個 POCO,它只包含顯示
View. 數據通常由Controller.胖模型,瘦控制器
Model做大部分的業務工作。它包含並填充 所需的所有數據View,並用於Controller保存數據等。MVC之美
MVC 的美妙之處在於它是開放的!你可以選擇你想要的任何類型的模型……你可以把你的所有數據放入
ViewState,放入 aModel,放入ViewModel包含一堆Models 的 a 中,等等。這真的取決於你。模型、視圖和控制器是空白畫布,可以隨意使用。我用什麼
我的團隊做了很多 MVC 工作,我們嘗試了很多不同的方法。我們最終決定我們最喜歡的是Fat Model, Skinny Controller範例。
我相信這種模式最擅長“保持簡單”和“不要重複自己”,並且絕對保持“關注點分離”。
以下是我們的程式碼的組織方式:
控制器
- 處理與 HTTP 請求有關的一切——重定向、身份驗證、網路安全、編碼等。
- 將所有“輸入”提供給 a
Model,並將 the 提供Model給視圖。不訪問業務或數據層。意見
- 處理所有 HTML 和 JSON 生成
- 只訪問強類型的數據
Model楷模
- 負責進行所有更新,呼叫業務和數據層,載入所有數據
- 處理所有驗證和錯誤,並將它們返回給控制器
- 包含所需的所有數據的屬性
View,並自行填充儘管這聽起來像是 MVC 的通用原則,但很快就會發現 MVC 不需要這些原則,這就是許多項目使用其他原則的原因。
例子
這是一個例子
Model。控制器創建它,填充它自己,然後控制器將它傳遞給視圖。public class UsersModel { protected UserBusiness userBusiness = new UserBusiness(); public UsersModel(string editUserName) { // Load all users: this.Users = userBusiness.GetAllUsers(); // Load the user to be edited: this.EditUser = (editUserName == null) ? null : userBusiness.GetUser(editUserName); } public List<User> Users { get; private set;} public User EditUser { get; private set; } }在這種情況下,所有“使用者業務邏輯”都在不同的項目(我們的“業務層”)中,因為我們有一個大型系統。但是較小的項目不需要這個……模型可以包含業務邏輯,甚至數據訪問程式碼。