2010-06-03 18 views
0

Si vous avez une commande qui référence un client, le modèle inclut-il l'ID du client ou une copie de l'objet client comme un objet de valeur (DDD pensant)?Les modèles DDD et MVC contiennent l'ID de l'entité séparée ou de l'entité elle-même?

Je voudrais faire ths:

public class Order { 
    public int ID {get;set;} 
    public Customer customer {get;set;} 
    ... 
} 

en ce moment je fais ceci:

public class Order { 
    public int ID {get;set;} 
    public int customerID {get;set;} 
    ... 
} 

Il serait plus commode d'inclure l'objet client complet plutôt que d'un ID à la vue Modèle passé à la forme. Sinon, je dois trouver comment obtenir l'information du fournisseur à la vue que l'ordre fait référence par ID.

Cela implique également que le référentiel comprenne comment traiter l'objet client qu'il trouve dans l'objet de commande lorsqu'il appelle save (si nous sélectionnons la première option). Si nous sélectionnons la deuxième option, nous aurons besoin de savoir où dans le modèle de vue pour le mettre.

Il est certain qu'ils choisiront un client existant. Cependant, il est également certain qu'ils voudront peut-être modifier l'information sur place dans le formulaire d'affichage. On pourrait faire valoir que le contrôleur extrait l'objet client, soumet les modifications du client séparément au référentiel, puis soumet les modifications à la commande, en gardant le customerID dans la commande.

Répondre

3

Si vous avez le modèle suivant:

public class Order { 
    public int ID {get;set;} 
    public Customer Customer {get;set;} 
    public object OrderProperty {get;set;} 
    ... 
} 

et la vue suivante (à partir ViewPage<Order>)

vous pouvez le faire à votre avis

Html.TextBoxFor(m=>m.OrderProperty); 

mais aussi

Html.HiddenFor(m=>m.Customer.Id) 
Html.TextBoxFor(m=>m.Customer.Name) 

dans votre contrôleur, il sera automatiquement lié

public ActionResult SomeAction(Order order) 
{ 
    // order.OrderProperty will be bound 
    // order.Customer.Id will be bound 
    // order.Customer.Name will be bound 
}