4

Je voudrais savoir, comment ce modèle que je pourrais la carte (avec Fluent NHibernate):Cartographie d'un champ privé dans NHibernate (avec Fluent NH)

public class Category 
{ 
    private IList<Product> _products; 
    public IEnumerable<Product> Products { 
     get { return _products; } 
    } 
    /* others properties */ 


    public Category() { 
     _products = new List<Product>(); 
    } 


    // to add a product i'd use something like this: 
    public void AddProducts(Product product) { 
     product.Category = this; 
     _products.Add(products); 
    } 
} 

Aujourd'hui, je suis en utilisant une propriété de IList , mais je ne veux pas exposer les méthodes comme "Ajouter", "Supprimer", etc ... sur ma propriété, donc je pense exposer une simple propriété de IEnumerable et encapsuler un IList comme un champ privé!

Alors, est-ce une bonne pratique? Comment pourrais-je le mapper en utilisant NHibernate?

Merci

Vive

+0

Un peu hors-sujet; mais oui, c'est une bonne pratique (ne pas exposer la collection directement). – DanP

Répondre

6

Si vous suivez une convention de nommage que NHibernate peut travailler avec, et votre exemple de code, c'est très facile:

HasMany(x => x.Products).KeyColumn("ProductId") 
    .AsBag().Inverse() 
    .Access.CamelCaseField(Prefix.Underscore); 
    // plus cascade options if desired 

Je pense que c'est plus qu'une bonne pratique, je pense que c'est presque toujours la bonne pratique.

+0

"Je pense que c'est plus qu'une bonne pratique, je pense que c'est presque toujours la bonne pratique." Une très bonne citation, en effet, protège les objets de votre domaine contre toute utilisation abusive et scelle la logique de votre domaine où vous avez décidé de l'appartenir. – Dav

Questions connexes