Lors de l'utilisation d'objets métier réutilisables, quelle est la meilleure pratique lors de la création de modèles de vue?
Nous utilisons un objet que nous appelons Builder
pour construire nos modèles de vue. Un générateur pour chaque unité logique de vues (commandes, utilisateurs, etc.), où chaque unité peut contenir un certain nombre de modèles de vue différents (les commandes contiennent un résumé, des lignes de commande, etc.).
Un générateur peut extraire des données via un ou plusieurs objets métier standard afin de créer un modèle de vue.
Qu'est-ce qui est considéré comme la meilleure pratique lorsqu'il s'agit d'utiliser des objets / modèles métier dans les modèles de vue?
Approche 1
Autoriser l'utilisation d'objets métier dans le modèle de vue?
//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
}
Approche 2
Prendre uniquement les données nécessaires des objets métier
//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
}
Je peux voir les avantages et les inconvénients des deux, mais je me demande s'il y a une approche acceptée? Dans l'approche 1, il n'y a pas de duplication de code autour des modèles, mais cela crée une dépendance à la logique métier. Dans l'approche 2, vous prenez uniquement les données nécessaires à la vue, mais vous dupliquez le code autour des modèles.