Oop C#OO设计:只需要一种抽象方法的情况
我有两个类具有完全相同的逻辑/工作流,除了一个方法 因此,我创建了一个抽象基类,其中不同的方法被声明为抽象的 下面是一些示例代码来演示我的设计;有没有人能提供更好的方法的建议,或者我的方向是否正确。 我没有使用接口,因为派生类B和C实际上共享大部分逻辑。有没有更好的方法通过依赖注入来完成我下面要做的事情Oop C#OO设计:只需要一种抽象方法的情况,oop,design-patterns,interface,abstract-class,virtual-functions,Oop,Design Patterns,Interface,Abstract Class,Virtual Functions,我有两个类具有完全相同的逻辑/工作流,除了一个方法 因此,我创建了一个抽象基类,其中不同的方法被声明为抽象的 下面是一些示例代码来演示我的设计;有没有人能提供更好的方法的建议,或者我的方向是否正确。 我没有使用接口,因为派生类B和C实际上共享大部分逻辑。有没有更好的方法通过依赖注入来完成我下面要做的事情 public abstract class A { public void StageData() { // some logic DoSomet
public abstract class A
{
public void StageData()
{
// some logic
DoSomething();
}
public void TransformData();
public abstract DoSomething();
}
public class B : A
{
public override void DoSomething()
{
// Do Something!
}
}
public class C : A
{
public override void DoSomething()
{
// Do Something!
}
}
你所做的没有错。在这种设计中引入依赖项注入将是混乱和过度的-您必须传入一个委托:
public class ABC
{
public ABC(Action z)
{
_doSomethingAction = z;
}
public void DoSomething()
{
_doSomthingAction.Invoke();
}
private Action _doSomthingAction;
}
您希望使用这种方法的原因不多,其中之一是如果您需要执行回调。所以,坚持你的模式,不要试图把事情复杂化。你所做的没有错。在这种设计中引入依赖项注入将是混乱和过度的-您必须传入一个委托:
public class ABC
{
public ABC(Action z)
{
_doSomethingAction = z;
}
public void DoSomething()
{
_doSomthingAction.Invoke();
}
private Action _doSomthingAction;
}
您希望使用这种方法的原因不多,其中之一是如果您需要执行回调。因此,请坚持您现有的模式,不要试图使事情过于复杂。当然,这是C#/Java“实现共享”的一种方式(另一种是组合/代理)。然而,仅仅因为这两个类共享一个共同的祖先并不意味着接口没有用处——它们使存根和/或使用DI和/或完全替换等变得更加容易。(我开始喜欢接口,因为它们允许这样的类层次结构/实现分离:如果我正在创建一种新语言,我可能只允许通过“接口”指定类型,并鼓励接口专门化。)是的,我更喜欢在大多数情况下使用接口,但如何处理或减少重复代码逻辑?我通常将重复代码合并到“无状态”函数中(它们可能会调用没有保证的回调,也不一定保证输入没有变化,只是函数本身没有固有的状态)。只处理输入/输出的函数通常可以从多个位置干净地访问。继承提供了“全部功能”当然,这是C#/Java“实现共享”的一种方式(另一种是组合/代理)。然而,仅仅因为两个类共享一个共同的祖先并不意味着接口没有用处——它们使存根和/或使用DI和/或完全替换等变得更容易。(我开始喜欢接口,因为它们允许这样的类层次结构/实现分离:如果我正在创建一种新语言,我可能只允许通过“接口”指定类型,并鼓励接口专门化。)是的,我更喜欢在大多数情况下使用接口,但如何处理或减少重复代码逻辑?我通常将重复代码合并到“无状态”函数中(它们可能会调用没有保证的回调,也不一定保证输入没有变化,只是函数本身没有固有的状态)。只处理输入/输出的函数通常可以从多个位置干净地访问。继承提供了“全部功能”当然,我不想弄乱实例变量。这一点很好!我想让事情尽可能简单。我认为使用接口和DI非常有用,但在这种特定情况下肯定会有点过分。DI很好,但在这种情况下没有依赖性-
DoSomething()
不需要任何东西,它只是相同功能的不同实现。很好!我想让事情尽可能简单。我认为使用接口和DI非常有用,但在这种特定情况下肯定会有过多的麻烦。DI很好,但在这种情况下没有依赖性-DoSomething()
不需要任何东西,它只是相同功能的不同实现。