J'essaie de mettre en pratique la première approche du modèle et j'élabore un modèle de domaine. Mon exigence est assez simple: UserSession peut avoir plusieurs ShoppingCartItems. Je commencerais par dire que je vais appliquer les interfaces du modèle de domaine aux entités générées par Linq2Sql (en utilisant des classes partielles). Mon exigence se traduit par trois tables de base de données (UserSession, Product, ShoppingCartItem où ProductId et UserSessionId sont des clés étrangères dans la table ShoppingCartItem). Linq2Sql génère ces entités pour moi. Je sais que je ne devrais même pas traiter de la base de données à ce stade, mais je pense qu'il est important de le mentionner.Application du modèle de domaine au-dessus des entités Linq2Sql
La racine agrégée est UserSession car un ShoppingCartItem ne peut pas exister sans UserSession, mais je ne suis pas clair sur le reste. Qu'en est-il du produit? C'est une entité de manière défensive mais doit-elle être associée à ShoppingCartItem?
Voici quelques suggestions (ils pourraient tous être mises en œuvre incorrectes):
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItem> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItem {
public Guid UserSessionId { get; set; }
public int ProductId { get; set; }
}
Un autre serait:
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItem> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItem {
public Guid UserSessionId { get; set; }
public IProduct Product { get; set; }
}
Un troisième est:
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItemColletion> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItemColletion {
public IUserSession UserSession { get; set; }
public IProduct Product { get; set; }
}
public interface IProduct {
public int ProductId { get; set; }
}
I J'ai l'impression que mon esprit est trop étroitement lié aux modèles de bases de données et aux tableaux, ce qui rend la chose difficile à saisir. Quelqu'un veut-il découpler?
Igor, et si je voulais ajouter Quantité à l'entité ShoppingCartItem? Aurais-je simplement ajouter en public int Quantité {get; définir;} à elle? – Thomas
Oui. Cela me frappe comme une propriété de domaine, donc il appartient au modèle. –