Quando si utilizzano oggetti di business riutilizzabili, qual è la best practice per la costruzione di modelli di vista?
Usiamo un oggetto che chiamiamo Builder
per costruire i nostri modelli di vista. Un costruttore per ciascuna unità logica di visualizzazioni (ordini, utenti, ecc.), In cui ogni unità può contenere un numero di modelli di visualizzazione diversi (gli ordini contengono riepilogo, righe di ordine, ecc.)
Un costruttore può estrarre i dati attraverso uno o più oggetti aziendali standard per costruire un modello di visualizzazione.
Quale è considerata la pratica migliore quando si tratta di utilizzare oggetti / modelli di business nei modelli di visualizzazione?
Approccio 1
Consenti l'uso di oggetti business nel modello di visualizzazione?
//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
}
Approccio 2
Prendi solo i dati necessari dagli oggetti di business
//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 vedere i vantaggi e gli svantaggi di entrambi, ma mi chiedo se c'è un approccio accettato? Nell'approccio 1, non esiste alcuna duplicazione del codice attorno ai modelli, ma crea una dipendenza dalla logica aziendale. Nell'approccio 2, si prendono solo i dati necessari per la vista, ma si duplica il codice attorno ai modelli.