J'ai deux entités Foo et Bar avec une relation de plusieurs à plusieurs entre eux. Supposons qu'il n'y ait pas d'argument sémantique pour expliquer pourquoi Foo pourrait être «responsable» de la relation plusieurs à plusieurs, mais nous décidons arbitrairement que Foo est responsable de la relation (ie, dans NHibernate, nous marquerions Bar comme Inverse)Comment faire face à une relation Many-To-Many dans mon API
Tout va bien du point de vue de la base de données, mais mes API d'entité révèlent un problème.
// Responsible for the relation
public class Foo
{
List<Bar> Bars = new List<Bar>();
public void AddBar(Bar bar)
{
Bars.Add(bar);
bar.AddFoo(this);
}
}
public class Bar
{
List<Foo> Foos = new List<Foo>();
// This shouldn't exist.
public void AddFoo(Foo foo)
{
Foos.Add(foo);
foo.AddBar(this); // Inf Recursion
}
}
Si nous avons décidé que Foo est responsable de cette relation, comment puis-je mettre à jour la collection associée à Bar sans créer une méthode Bar.AddFoo publique() qui devrait même pas exister?
Je pense que je devrais être en mesure de maintenir l'intégrité de mon modèle de domaine sans avoir à recharger ces entités à partir de la base de données après une opération comme celle-ci.
MISE À JOUR: Code tweak inspiré par le commentateur.
en fait, si Foo doit être public pour que les consommateurs puissent l'utiliser, alors l'exposer comme une collection immuable et utiliser la méthode AddFoo(). –
Mes collections sont immuables, je ne voulais pas m'embêter avec tout ce gâchis dans l'exemple. Je suis retourné et en utilisant interne pour nettoyer certains domaine, je pense que cela a vraiment aidé ... Nous verrons comment cela fonctionne. –