【问题标题】:How to develop methods which has the same functionality for some entities?如何为某些实体开发具有相同功能的方法?
【发布时间】:2010-11-20 04:28:07
【问题描述】:

我有一个类框架。每个类代表一些实体并具有基本的静态方法:添加、获取、更新和删除。

这个方法是静态的,因为我想允许在不实例化对象的情况下执行一些操作。 例如,要添加一些对象,我必须这样做: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);
        }
    }

什么方法更好更干净?或者您可能会建议另一种方法?

谢谢

【问题讨论】:

    标签: c# frameworks static-methods


    【解决方案1】:

    嗯。

    我的意思是,我首先要说的是,不要编写自己的实体框架,而是使用 LLBLGen 之类的东西。

    其次我想说,如果你忽略这个建议,你想要一些超级类,比如

    public abstract class SavableBase
    {
      protected abstract void Add ();
      protected abstract void Update ();
    
      public void Save ()
      {
         if( !saved ){
            Add();
         } else {
            Update();
         }
      }
    }
    

    然后适当地实现这些方法。

    【讨论】:

    • 实际上我已经为此目的使用了 NHibernate。但问题是如何组织访问位于主框架中的对象的方法(具有与我之前描述的相同的功能)?所以我们正在从另一个库中访问框架中的对象。
    • 对。嗯,我已经描述过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2020-10-13
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多