При использовании бизнес-объектов многократного использования, что считается наилучшей практикой при построении моделей представлений?
Мы используем объект, который мы вызываем, Builder
для построения наших моделей представлений. Один конструктор для каждой логической единицы представлений (заказов, пользователей и т. Д.), Где каждая единица может содержать несколько различных моделей представлений (заказы содержат сводку, строки заказа и т. Д.).
Разработчик может провести данные через один или несколько стандартных бизнес-объектов, чтобы построить модель представления.
Что считается лучшей практикой, когда речь идет об использовании бизнес-объектов / моделей в моделях представления?
Подход 1
Разрешить использование бизнес-объектов в модели представления?
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary();
obModel.Order = obOrder;
return obModel;
}
}
//View model
public class OrderSummary
{
public Some.Business.Logic.Order Order;
//Other methods for additional logic based on the order
//and other properties
}
Подход 2
Взять только необходимые данные из бизнес-объектов
//Business object in some library
public class Order
{
public int OrderNum;
public int NumOrderLines;
//...
}
//Order builder in website
public class OrderBuilder
{
public OrderSummary BuildSummaryForOrder(int OrderNum)
{
Some.Business.Logic.Order obOrder = Some.Business.Logic.GetOrder(OrderNum);
//Any exception handling, additional logic, or whatever
OrderSummary obModel = new OrderSummary()
{
OrderNum = obOrder.OrderNum,
NumOrderLnes = obOrder.NumOrderLines,
}
return obModel;
}
}
//View model
public class OrderSummary
{
public int OrderNum;
public int NumOrderLines
//Other methods for additional logic based on the order
//and other properties
}
Я вижу преимущества и недостатки обоих, но мне интересно, есть ли приемлемый подход? В подходе 1 нет дублирования кода вокруг моделей, но это создает зависимость от бизнес-логики. При подходе 2 вы берете только данные, необходимые для представления, но дублируете код вокруг моделей.