在几个类中重构公共代码的最佳方法

本文关键字:代码 方法 最佳 重构 几个 | 更新日期: 2023-09-27 18:19:13

我试图清理一些代码,我看到有三个类,所以非常相同的事情,除了所有三个有更多的属性比其他的和需要保存更多或更少的属性比其他两个

我有一个类似

的东西
//class 1
public class GenerateQKey
{
      public void DoSomething()
      {
          //this one uses a specific class with some parameters
          var KeySet = new GenerateQSetOfK()
              {
                   KeyName = "some key";
                   KeyChain = "Some key chain";
                   KeyManufacturer = "Manufacturer";
              }
           someCall.Save(KeySet);
      }
}

然后我有另一个:

//class 2
public class GenerateDifferentKey
{
      public void DoSomething()
      {
          //this one uses a specific class with some parameters + more
          var KeySet = new GenerateDifferenKey()
              {
                   Name = "some key";
                   Chain = "Some key chain";
                   Manufacturer= "Manufacturer";
                   Price = 3.00m;
              }
           someOtherCall.Save(KeySet);
      }
}

还有一个相同的原则……它们基本上都在做同样的事情,只是使用不同的API并保存到不同的地方。我想以一种非常好的方式重构它,但我不确定它会是什么。

可能有一个管理器类,接收一个GenerateQKey或一个GenerateDifferentKey,并在确定键的类型时调用特定的api,但是参数呢?,我应该创建一个基类吗?

我正在努力成为一个更好的开发人员,你的意见将真正有助于实现这一目标。

在几个类中重构公共代码的最佳方法

对我来说,这听起来像是模板方法模式可以解决的问题。

你的模板方法的步骤在所有子类之间是相似的,而"使用不同的API"answers"保存到不同的地方"的方法将是抽象方法,每个子类将以不同的方式实现。

public abstract class SharedClass
{
   abstract CallApi();
   abstract Save();
   public void MyTemplateMethod()
   {
     // shared steps...
     // Call abstract templated method
     this.CallApi();
     // more shared steps...
     // Call abstract templated method
     this.Save(); 
   }
}
public class ChildClass1 : SharedClass
{
  public void CallApi()
  {
     // I use API #1
  }
  public void Save()
  {
    // I save by doing it way #1
  }
}
public class ChildClass2 : SharedClass
{
  public void CallApi()
  {
     // I use API #2
  }
  public void Save()
  {
    // I save by doing it way #2
  }
}