J'ai un cadre de classes. Chaque classe représente une entité et possède des méthodes statiques de base: Ajouter, Obtenir, Mettre à jour et Supprimer.Comment développer des méthodes qui ont la même fonctionnalité pour certaines entités?
Cette méthode est statique car je souhaite autoriser une action sans instanciation de l'objet. Par exemple, pour ajouter un objet, je dois faire ceci: Foo.Add (foo).
Maintenant, je veux avoir un certain nombre de méthodes qui seraient invoquées à partir d'un autre cadre pour chaque classe. Mais la fonctionnalité de cette méthode sera la même: par exemple je veux vérifier si l'objet existe et si ce n'est pas le cas - créer, sinon - mettre à jour.
Quelle est la meilleure approche pour l'implémenter?
dois-je faire de cette manière pour toutes les classes:
Par exemple:
public void DoSomethingWithFoo(Foo foo)
{
if (Foo.Get(foo.id) != null)
Foo.Update(foo);
else
Foo.Add(foo);
}
public void DoSomethingWithBar(Bar bar)
{
if (Bar.Get(bar.id) != null)
Bar.Update(bar);
else
Bar.Add(bar);
}
Ou est-il préférable de le faire en utilisant InvokeMember (selon idée d'avoir tout le code dans un endroit) ?
.: par exemple
public void DoSomethingWithFoo(Foo foo)
{
DoSomethingWithObject(foo);
}
private void DoSomethingWithObject(object obj)
{
Type type = obj.GetType();
object[] args = {type.GetProperty("ID").GetValue(obj, null)};
object[] args2 = { obj };
if (type.InvokeMember("Get", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, args) != null)
{
type.InvokeMember("Update", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, args2);
}
else
{
type.InvokeMember("Add", BindingFlags.Default | BindingFlags.InvokeMethod, null, null, args2);
}
}
Quelle est la meilleure approche et plus propre? Ou peut-être que vous proposerez une autre approche?
Merci
En fait, j'utilise déjà NHibernate à cette fin. Mais la question est de savoir comment organiser les méthodes (qui ont la même fonctionnalité que je l'ai décrit plus haut) qui accèdent aux objets qui se trouvent dans le cadre principal? Nous accédons donc aux objets à partir d'une autre bibliothèque. –
Droite. Eh bien, je l'ai décrit. –