public class ViewModelStatistic
{
public string CountOfOrders { get; set; }
public string CountOfUsers { get; set; }
public string CountOfMenuItems { get; set; }
public string CountOfNewMesages { get; set; }
public string CountOfAllMessages { get; set; }
}
ООП в ASP.NET MVC
Код:
Стало интересно узнать такую вещь: такие "классы данных" вроде противоречат концепции ООП, но является ли подобная практика нормальной в ASP.NET MVC, или будущий руководитель будет тыкать меня носом в это ?
Я понимаю, что вопрос может не иметь однозначного ответа, но интересно выслушать мнения более компетентных людей, взвесить за и против.
Такчто тыкать будут или нет зависит от того зачем и как ты используешь такие структуры. - приведи реальный пример.
2). Например, для post запросов, используя Json. Обьект с такими же полями сериализуеться скриптом и отсылается на сервер. Экшн принимает параметр модели ViewModelStatistic
Код:
public Json SomeAction (ViewModelStatistic model)
{
// некоторый код
return Json("Ok");
}
{
// некоторый код
return Json("Ok");
}
3). Реальный пример:
Код:
[Serializable]
public class UserOrderViewEditModel
{
public string StartDate { get; set; }
public string EndDate { get; set; }
public string typeOf { get; set; }
public string[] ListMenu { get; set; }
public string User { get; set; }
public string Status { get; set; }
public string Comment { get; set; }
public string OrderId { get; set; }
public UserOrderViewEditModel()
{
}
public UserOrderViewEditModel(UserOrder order)
{
this.Comment = order.Comment;
this.StartDate = order.StartDate.ToString();
this.typeOf = order.Type_of;
this.User = order.aspnet_Users.UserName;
this.EndDate = order.FinishDate.ToString();
this.Comment = order.Comment;
this.OrderId = order.Order_id.ToString();
}
}
public class UserOrderViewEditModel
{
public string StartDate { get; set; }
public string EndDate { get; set; }
public string typeOf { get; set; }
public string[] ListMenu { get; set; }
public string User { get; set; }
public string Status { get; set; }
public string Comment { get; set; }
public string OrderId { get; set; }
public UserOrderViewEditModel()
{
}
public UserOrderViewEditModel(UserOrder order)
{
this.Comment = order.Comment;
this.StartDate = order.StartDate.ToString();
this.typeOf = order.Type_of;
this.User = order.aspnet_Users.UserName;
this.EndDate = order.FinishDate.ToString();
this.Comment = order.Comment;
this.OrderId = order.Order_id.ToString();
}
}
Клас UserOrder - это класс созданный LinqToSql по реальной БД.
И метод что с ним работает:
Код:
[HttpPost]
public ActionResult Edit(UserOrderViewEditModel model)
{
_dataManager.OrderRepozitory.UpdateOrder(model);
return Json("Ok");
}
public ActionResult Edit(UserOrderViewEditModel model)
{
_dataManager.OrderRepozitory.UpdateOrder(model);
return Json("Ok");
}
4). И ещё один реальный пример.
Код:
public class UserOrderViewShowModel:UserOrderViewEditModel
{
public int[] SelectedItemId { get; set; }
public MultiSelectList OrderList { get; set; }
public MultiSelectList Menu { get; set; }
public MultiSelectList MenuTypes
{
get
{
return new MultiSelectList(InitializeMenuTypes(), "Value", "Text");
}
}
public MultiSelectList TypeOf
{
get
{
return new MultiSelectList(InitializeTypeOf(), "Value", "Text");
}
}
private List<SelectListItem> InitializeTypeOf()
{
List<SelectListItem> TypeOf = new List<SelectListItem>();
TypeOf.Add(new SelectListItem { Text = "С собой", Value = "0" });
TypeOf.Add(new SelectListItem { Text = "На месте", Value = "1" });
return TypeOf;
}
private List<SelectListItem> InitializeMenuTypes()
{
List<SelectListItem> MenuTypes = new List<SelectListItem>();
MenuTypes.Add(new SelectListItem { Text = "Первое", Value = "0" });
MenuTypes.Add(new SelectListItem { Text = "Второе", Value = "1" });
MenuTypes.Add(new SelectListItem { Text = "Салаты", Value = "2" });
MenuTypes.Add(new SelectListItem { Text = "Напиток", Value = "3" });
return MenuTypes;
}
}
{
public int[] SelectedItemId { get; set; }
public MultiSelectList OrderList { get; set; }
public MultiSelectList Menu { get; set; }
public MultiSelectList MenuTypes
{
get
{
return new MultiSelectList(InitializeMenuTypes(), "Value", "Text");
}
}
public MultiSelectList TypeOf
{
get
{
return new MultiSelectList(InitializeTypeOf(), "Value", "Text");
}
}
private List<SelectListItem> InitializeTypeOf()
{
List<SelectListItem> TypeOf = new List<SelectListItem>();
TypeOf.Add(new SelectListItem { Text = "С собой", Value = "0" });
TypeOf.Add(new SelectListItem { Text = "На месте", Value = "1" });
return TypeOf;
}
private List<SelectListItem> InitializeMenuTypes()
{
List<SelectListItem> MenuTypes = new List<SelectListItem>();
MenuTypes.Add(new SelectListItem { Text = "Первое", Value = "0" });
MenuTypes.Add(new SelectListItem { Text = "Второе", Value = "1" });
MenuTypes.Add(new SelectListItem { Text = "Салаты", Value = "2" });
MenuTypes.Add(new SelectListItem { Text = "Напиток", Value = "3" });
return MenuTypes;
}
}
И один из работающих с ним методом:
Код:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(int Id)
{
UserOrderViewShowModel ViewModel = InitializeUserOrderShowModel();
UserOrder Order = _dataManager.OrderRepozitory.GetUserOrderItem(Id);
IEnumerable<OrderContent> MenuList = _dataManager.OrderRepozitory.GetOrderContent(Id);
List<SelectListItem> ListForOrderList = new List<SelectListItem>();
foreach (var item in MenuList)
{
ListForOrderList.Add(new SelectListItem { Text = item.Menu.Name + "=" + item.Count.ToString() + "шт", Value = item.Menu.Price.ToString(), Selected = false });
}
ViewModel.OrderId = Order.Order_id.ToString();
ViewModel.OrderList = new MultiSelectList(ListForOrderList, "Value", "Text");
ViewData.Model = ViewModel;
return View();
}
public ActionResult Edit(int Id)
{
UserOrderViewShowModel ViewModel = InitializeUserOrderShowModel();
UserOrder Order = _dataManager.OrderRepozitory.GetUserOrderItem(Id);
IEnumerable<OrderContent> MenuList = _dataManager.OrderRepozitory.GetOrderContent(Id);
List<SelectListItem> ListForOrderList = new List<SelectListItem>();
foreach (var item in MenuList)
{
ListForOrderList.Add(new SelectListItem { Text = item.Menu.Name + "=" + item.Count.ToString() + "шт", Value = item.Menu.Price.ToString(), Selected = false });
}
ViewModel.OrderId = Order.Order_id.ToString();
ViewModel.OrderList = new MultiSelectList(ListForOrderList, "Value", "Text");
ViewData.Model = ViewModel;
return View();
}
Критикуйте беспощадно)
З.Ы. Я знаю что наследование тут быть может не совсем корректно да и не дописано оно ещё - только заинтересовался проблемой вот таких вот представлений.
Цитата: rikki
1). Это не обертка, и ,в принципе, смысловой нагрузки get set не несут.(Потому и создал тему, так как получаются классы без логики)
Это совершенно нормально для ASP.NET MVC (общее название таких сущностей - DTO).
Правда, иногда передают просто коллекцию объектов (IList<T>) - она уже содержит свойство Count.
hardcase, спасибо, буду спать спокойней)