2009-08-17 34 views
0

我有一個類的框架。每個類代表一些實體,並具有基本的靜態方法:添加,獲取,更新和刪除。如何開發對某些實體具有相同功能的方法?

此方法使靜態,因爲我想允許執行某些操作而不實例化的對象。 例如,要添加一些對象,我必須這樣做: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做:

應該怎麼做它用這種方式爲每個類:

如?

例如爲:

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); 
     } 
    } 

哪種方法更好,更清潔?或者,也許你會建議另一種方法?

謝謝

回答

0

好吧。

我的意思是我會首先說不寫你自己的實體框架,並使用像LLBLGen

其次我想說,如果你忽略了他的意見,你要像

public abstract class SavableBase 
{ 
    protected abstract void Add(); 
    protected abstract void Update(); 

    public void Save() 
    { 
    if(!saved){ 
     Add(); 
    } else { 
     Update(); 
    } 
    } 
} 

一些超級類,然後適當地實現這些方法。

+0

其實我已經在使用NHibernate來達到這個目的。但問題是如何組織這些訪問位於主框架中的對象的方法(與前面描述的功能相同)?所以我們從另一個庫的框架訪問對象。 – 2009-08-17 10:13:59

+0

對。那麼我已經描述過了。 – 2009-08-17 10:18:12

相關問題