【问题标题】:Refactoring: How can we abstract these classes [closed]重构:我们如何抽象这些类 [关闭]
【发布时间】:2012-08-31 10:10:21
【问题描述】:

有些类中有一些方法和成员变量看起来非常相似,我想我可以重构和抽象它们...但我不确定这是否是正确的做法:

例如,假设我有这两个类:

public class CaseField
{
  private int mlObjectKey = CommonIndepClass.GetNextObjectKey();
  public int ObjectKey
  {
    get
    {
      return mlObjectKey;
    }
  }

  // some other specific methods...
}

然后是另一个类:

public class AsOfField
{
   private int mlObjectKey = CommonIndepClass.GetNextObjectKey();

   public int ObjectKey
   {
       get
       {
          return mlObjectKey;
       }
   }

   // some specific methods ... 
}

所以我在考虑创建一个抽象类并将这些方法和成员变量分解并放入该抽象类中是否正确:

public abstract class CommonFields
{
   private int mlObjectKey = CommonIndepClass.GetNextObjectKey();

   public int ObjectKey
   {
       get
       {
          return mlObjectKey;
       }
   }

}

public class CaseField: CommonFields
{
  // just its own specific methods and member variables. 
}



public class AsOfField: CommonFields
{
  // just its own specific methods and member variables. 
}

【问题讨论】:

  • 作为一种保持代码 DRY 的机制,这看起来很完美,并且在您继续开发更多 CommonField 类型时将继续提供好处。

标签: c# abstract-class


【解决方案1】:

这似乎不无道理。

另一种方法是使用mixins 实现此功能。这将允许您定义一个具有通用功能的类,但您不必实现通用基类。详情请见this SO answer

【讨论】:

  • hmm..谢谢,我什至没有听说过“mixins”这个词......会研究它......但是如果它有太多的学习曲线,所以我在这里的抽象是也正确吗?我担心那些成员变量等等......
  • 我相信它们在 .NET 领域被称为“扩展方法”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多