C# 在几个类中重构公共代码的最佳方法?
我正在尝试清理一些代码,我看到有三个类,除了这三个类之外,其他三个类都是相同的,其中一些类的属性比其他的多,并且需要比其他两个保存更多或更少的属性 我有点像C# 在几个类中重构公共代码的最佳方法?,c#,asp.net,C#,Asp.net,我正在尝试清理一些代码,我看到有三个类,除了这三个类之外,其他三个类都是相同的,其中一些类的属性比其他的多,并且需要比其他两个保存更多或更少的属性 我有点像 //class 1 public class GenerateQKey { public void DoSomething() { //this one uses a specific class with some parameters var KeySet = new Ge
//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并保存到不同的地方。我想以一种非常好的方式重构它,但我不确定它会是什么
可能有一个manager类,它接收GenerateQKey或GenerateDifferentKey,并在确定键的类型后调用特定的api,但是参数呢?我应该创建一个基类吗
我正在努力成为一名更好的开发人员,您的投入将真正有助于实现这一目标。对我来说,这听起来像是可以解决的问题 模板方法的步骤在所有子类之间都是相似的,用于“使用不同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
}
}
你可以用它来清理,但作为一个警告,它可能会变得一团糟。看看
我看到有三个类,除了这三个类之外,其他三个类都是相同的,其中一些类的属性比其他两个多,需要保存的属性比其他两个多或少。
抱歉什么?我认为OP表示有三个类具有相同的用途,但是类a的属性是foo
,B类具有属性foo
和bar
,C类具有属性foo
,bar
,baz
。另一种选择是使用超类,只分配所需的值。只是在读取属性时要非常小心,如果它们没有分配给您,您将得到一个对象引用错误。