私はクラスのフレームワークを持っています。各クラスはいくつかのエンティティを表し、基本的な静的メソッド(Add、Get、Update、およびDelete)があります。
オブジェクトをインスタンス化せずに何らかのアクションを実行できるようにするため、このメソッドは静的になりました。たとえば、オブジェクトを追加するには、Foo.Add(foo)を実行する必要があります。
ここで、クラスごとに別のフレームワークから呼び出されるメソッドをいくつか用意したいと思います。ただし、このメソッドの機能は同じです。たとえば、オブジェクトが存在するかどうかを確認し、存在しない場合は作成し、そうでない場合は更新します。
それを実装するための最良のアプローチは何ですか?
すべてのクラスでこのように行う必要があります:
例えば:
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);
}
それとも、InvokeMemberを使用してそれを行う方が良いですか(すべてのコードを1か所にまとめるという考えによる)?
例えば:
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);
}
}
どのアプローチがより良く、よりクリーンですか?または多分あなたは別のアプローチを提案しますか?
ありがとう