[英]Where to store model classes in ASP.NET MVC solution?
我有一些困惑決定在我的MVC項目中存儲我的數據類(模型)的位置。 我的解決方案通常遵循以下格式:
我的問題是 - 數據類應該存儲在哪里? 在傳統的MVC項目中,模型顯然存儲在Web項目的models文件夾中。 但是,當我試圖通過將問題分成多個項目來保持我的解決方案松散耦合時,數據模型是否應該存儲在不同的項目中,比如我的Core項目?
查看僅為向MVC視圖提供數據而設計的模型類應位於ProjectName.Web
項目中根據標准ASP .NET MVC約定的Models
文件夾。
這不是一個要求,您可以輕松地將它們保存在單獨的程序集中。
如果您正在討論域模型,ORM實體或包含數據的任何類型的非UI類; 那些可能屬於一個單獨的項目。
一般來說,如果你想在另一個項目中重用核心庫,我會保留核心庫中的所有內容。 使用這種方法,您可以將“域”模型( http://en.wikipedia.org/wiki/Domain_model )隔離到核心層,只有特定於Web的功能才會出現在您的網站中。
假設您希望用戶登錄網站,但在winforms應用程序中,身份驗證將由登錄到PC的用戶處理。
您可以將它放在您的網站中,並在不同的應用程序中完全單獨處理身份驗證,而無需將其放在您的域模型中。
然后,您將只在核心庫中保留特定於域的模型。
然后,您將創建數據模型,以包裝核心實體,或者它們自己的組合實體表示。 然后,您可以使用模型中的數據來控制輸出。
編輯:這是一個示例設置(雖然冗長,我盡可能簡短地說明分離)。
//--------------- In your domain library:
public class DataRepository : IDataRepository {
public DataRepository() {
} // end constructor
public DataEntity GetData(DataRequest request) {
//get data based on DataRequest
return new DataEntity();
} // end function GetData
} // end class DataRepository
public class DataRequest {
public String RequestingUser {get; set;}
public Dictionary<String, object> Parameters {get;}
} // end class DataRequest
public class DataEntity {
public string Name {get; set;}
public Guid Id {get; set;}
public string SomeData {get; set;}
} // end class DataEntity
//--------------- In your web library:
public class UserRequest {
public string UserName {get; set;}
} // end class UserRequest
public class LandingPageViewModel {
public LandingPageViewModel() {
Data = new DataItemViewModel();
} // end constructor
public void FillData(DataEntity entity) {
Data.Name = entity.Name;
Data.DataValue = entity.SomeValue;
Data.ShowValue = !String.IsNullOrWhiteSpace(UserName);
} // end method FillData
public string UserName {get; set;}
public List<string> Messages {get; set;}
public DataItemViewModel Data {get; set;}
} // end class LandingPageViewModel
public class DataItemViewModel {
public string Name {get; set;}
public string DataValue {get; set;}
public bool ShowValue {get; set;}
} // end class DataItemViewModel
public class MyController : Controller {
private IDataRepository _repository;
public MyController(IDataRepository repository) {
_repository = repository;
} // end constructor
public ActionResult LandingPage(UserRequest user) {
ActionResult result = null;
DataRequest itemRequest = new DataRequest();
itemRequest.RequestingUser = user.UserName;
DataEntity myEntity = null;
myEntity = _repository.GetData(itemRequest);
if(myEntity != null) {
LandingPageViewModel viewModel = new LandingPageViewModel();
viewModel.UserName = user.UserName;
viewModel.FillData(myEntity);
result = View("LandingPage", viewModel);
} else {
result = View("Error");
} // end if/else
return result;
} // end action LandingPage
} // end class MyController
// In a view
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of LandingPageViewModel)" %>
<div>
<%:Model.Name;%>
<%
if(Model.ShowValue) {
%>
<%:Model.DataValue;%>
<%
} // end if
%>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.