In MVC, does it make sense to move logic inside a domain model? I'm trying to cut down too many classes as my project uses several APIs for every small data to be displayed on a page. e.g.
public class AccountModel{
public int Id {get;set;} //property
....
public List<AccountModel> GetAccounts(){ //method
....
}
}
Otherwise, what can be a good practice with too many API calls involved?
Adding sample code structure similar to what I'm doing in my project.
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
}
----------------------------------------------------------------
Similarly, I have multiple controllers and multiple APIs and respective models, and service classes. Can you please suggest a better approach?