【发布时间】:2015-10-21 03:25:18
【问题描述】:
在 MVC 中,在域模型中移动逻辑是否有意义?我试图减少太多的类,因为我的项目使用多个 API 来处理要在页面上显示的每个小数据。 例如
public class AccountModel{
public int Id {get;set;} //property
....
public List<AccountModel> GetAccounts(){ //method
....
}
}
否则,如果涉及太多 API 调用,有什么好的做法?
添加类似于我在项目中所做的示例代码结构。
public class TestController : Controller
{
public ActionResult Index(string id)
{
var testService = new TestService();
var testModel = new TestModel();
testModel.UserData = testService.GetTestData(id);
testModel.MenuList = testService.GetMenu(id);
testModel.UserItems = testService.GetItems(id);
return View(testModel);
}
}
-----------------------------------------------------------------
public class TestService
{
public TestModel GetTestData(string id)
{
TestModel testData = null;
try
{
using (HttpClient httpClient = new HttpClient())
{
string requestUri = "http://10.8.200.1/test/" + id;
HttpRequestMessage testRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);
HttpResponseMessage response = httpClient.SendAsync(testRequest).Result;
if (response.IsSuccessStatusCode)
{
var jsonData = response.Content.ReadAsStringAsync().Result;
testData = JsonConvert.DeserializeObject<TestModel>(jsonData);
}
}
}
catch (Exception ex)
{
}
return testData;
}
public List<Menu> GetMenu(string id)
{
List<Menu> menus = null;
try
{
using (HttpClient httpClient = new HttpClient())
{
string requestUri = "http://10.8.200.1/menu/" + id;
HttpRequestMessage testRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);
HttpResponseMessage response = httpClient.SendAsync(testRequest).Result;
if (response.IsSuccessStatusCode)
{
var jsonData = response.Content.ReadAsStringAsync().Result;
menus = JsonConvert.DeserializeObject<List<Menu>>(jsonData);
}
}
}
catch (Exception ex)
{
}
return menus;
}
public List<UserItem> GetItems(string id)
{
List<UserItem> items = null;
try
{
using (HttpClient httpClient = new HttpClient())
{
string requestUri = "http://10.8.200.1/items/" + id;
HttpRequestMessage testRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);
HttpResponseMessage response = httpClient.SendAsync(testRequest).Result;
if (response.IsSuccessStatusCode)
{
var jsonData = response.Content.ReadAsStringAsync().Result;
items = JsonConvert.DeserializeObject<List<Menu>>(jsonData);
}
}
}
catch (Exception ex)
{
}
return items;
}
}
-----------------------------------------------------------------
public class TestModel
{
public string Name{get;set;}
public string PublisherId{get;set;}
public string AccountType{get;set;}
public UserData UserData {get;set;} //There will be a UserData model
public List<Menu> MenuList {get;set;} //There will be a Menu model
public List<UserItem> UserItems {get;set;} //There will be a UserItem model
}
----------------------------------------------------------------
同样,我有多个控制器和多个 API 以及各自的模型和服务类。您能提出更好的方法吗?
【问题讨论】:
标签: c# oop model-view-controller