这是反模式吗?

Ole*_*rov 1 c# inheritance design-patterns anti-patterns

我经常看到这样的代码:

public abstract class AbstractDataReader
{
    public void Read()
    {
        var reader = new StreamReader(FileName);
        ........
    }

    protected abstract string FileName
    {
        get;
    }
}

public class DataReader : AbstractDataReader
{
    protected override string FileName
    {
        get { return "data.txt"; }
    }
}
Run Code Online (Sandbox Code Playgroud)

至于我它接缝作为反模式,因为DataReader类没有逻辑,我不能AbstractDataReader没有继承它,我也必须继承该类只是为了指定参数而且我工作得慢,然后只是把它放在那里也很奇怪参数通过构造函数.

但我找不到这种反模式的名称.

有人知道吗?

Ben*_*igt 6

是的,这是一种反模式.抽象类已经强制派生类如何工作,这里对于单个类的类层次结构没有任何优势.

如果抽象类改为调用纯虚函数来获取StreamReader它,那就有意义了.然后,不同的派生类可以附加到文件,网络流或动态生成的数据.

这里的反模式是"违反开放原则"(SOLID的第二部分).