我正在尝试清理一些代码,并且我看到有三个类,所以除了所有三个类之外,它们具有比其他类更多的属性,并且需要保存比其他两个更多或更少的属性。
我有类似
的东西//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的类型时,但参数怎么样?,我应该创建一个基类吗?
我正在努力成为一名更好的开发者,你的意见确实有助于实现这一目标。
答案 0 :(得分:1)
对我而言,这听起来像是Template method pattern可以解决的问题。
您的模板方法将具有所有子类之间相似的步骤,并且“使用不同API”和“保存到不同位置”的方法将是每个子类将以不同方式实现的抽象方法。
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
}
}