Ao usar objetos de negócios reutilizáveis, o que é considerado uma prática recomendada ao criar modelos de vista?
Usamos um objeto que chamamos Builder
para construir nossos modelos de exibição. Um construtor para cada unidade lógica de visualizações (pedidos, usuários etc.), em que cada unidade pode conter um número de modelos de visualização diferentes (pedidos contém resumo, linhas de pedidos etc.).
Um construtor pode extrair dados através de um ou mais objetos de negócios padrão para construir um modelo de visualização.
Qual é considerada a melhor prática quando se trata de usar objetos / modelos de negócios em modelos de exibição?
Abordagem 1
Permitir o uso de objetos de negócios no modelo de exibição?
//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
}
Abordagem 2
Pegue apenas os dados necessários dos objetos de negócios
//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
}
Posso ver os benefícios e as desvantagens de ambos, mas me pergunto se existe uma abordagem aceita? Na abordagem 1, não há duplicação de código nos modelos, mas cria uma dependência da lógica de negócios. Na abordagem 2, você pega apenas os dados necessários para a exibição, mas duplica o código em torno dos modelos.