Використовуючи бізнес-об'єкти для багаторазового використання, що вважається найкращою практикою при побудові моделей перегляду?
Ми використовуємо об'єкт, який ми називаємо 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 ви берете лише дані, необхідні для перегляду, але дублюєте код навколо моделей.