c# - 如何避免重复的接口(interface)代码?

标签 c# oop refactoring

由于接口(interface)不能包含实现,在我看来这会导致从接口(interface)继承的类中出现代码重复。在下面的示例中,假设设置从 Stream 读取的前 10 行左右是重复的。 尽量不要关注这里的措辞,而是关注在每个类之间创建重复代码是多么容易的概念。

例如:

public interface IDatabaseProcessor
{
   void ProcessData(Stream stream);
}
public class SqlServerProcessor : IDatabaseProcessor
{
    void ProcessData(Stream stream)
    {
      // setting up logic to read the stream is duplicated code
    }
}
public class DB2Processor : IDatabaseProcessor
{
    void ProcessData(Stream stream)
    {
      // setting up logic to read the stream is duplicated code
    }
}

我意识到为 ProcessData 使用抽象基类并添加非抽象成员是一种解决方案。但是,如果我真的非常想改用接口(interface)怎么办?

最佳答案

在这种情况下,您可能希望同时使用接口(interface)和抽象基类。

你会同时拥有两者的唯一原因是因为另一个类不会共享抽象基代码但会尊重接口(interface)。考虑:

public interface IDatabaseProcessor {
   void ProcessData(Stream stream);
}

public abstract class AbstractDatabaseProcessor : IDatabaseProcessor {
    public void ProcessData(Stream stream) {
      // setting up logic to read the stream is not duplicated
    }
}

public class SqlServerProcessor : AbstractDatabaseProcessor {
    //SqlServerProcessor specific methods go here
}

public class DB2Processor : AbstractDatabaseProcessor {
    // DB2Processor specific methods go here
}

public class NonSharedDbProcessor : IDatabaseProcessor {
    void ProcessData(Stream stream) {
      // set up logic that is different than that of AbstractDatabaseProcessor
    }
}

语法可能有点不对,我不是普通的 C# 用户。我是通过OOP标签来的。

关于c# - 如何避免重复的接口(interface)代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063080/

相关文章:

c# - Resharper 将对象更改为界面

c# - 将简单的 lambda 表达式或局部函数分配给委托(delegate)的性能

c# - 在 .Net 应用程序中调用 C++ Dll 时出现 System.Access 冲突异常

javascript - 就良好实践而言,带有闭包的 javascript 原型(prototype)是一件好事吗

c# - ASP.NET 设计问题 - 工厂与动态选择代码隐藏(如果可能的话)

kotlin - Kotlin中的内联构造函数是什么?

c# - ASP.NET 页面不应在提交时回发整个页面

C# 参数化查询 X 需要未提供的参数 Y

ruby - 在给定端口上启动和停止进程的更好方法

c# - 有没有办法重构 C# 独有的 switch 语句?