c# - 它是反模式吗?

标签 c# design-patterns inheritance 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"; }
    }
}

对我来说,它看起来像反模式,因为 DataReader 类没有逻辑,我不能在不继承它的情况下使用 AbstractDataReader,这也很奇怪,我必须继承这个类只是为了指定参数,而且我的工作速度比仅通过构造函数传递参数要慢。

但是我找不到这个反模式的名字。

有人知道吗?

最佳答案

是的,这是一个反模式。抽象类已经规定了派生类的工作方式,这里类层次结构与单个类相比没有任何优势。

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

这里的反模式是“违反开闭原则”(SOLID 的第二部分)。

关于c# - 它是反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122751/

相关文章:

java - 享元设计模式如何维护不同的对象?

java - 事件通知: Java design patten

c# - 有没有办法在没有泛型约束的情况下强制执行无参数构造函数

typescript 类引用

c# - 通过将参数视为文本来设置正则表达式模式

c# - 构建后找不到已安装包的命名空间

c# - 不要在 Entity Framework 中映射 ReactiveUI 属性

c# - 通过 javascript 从 View 渲染页面

javascript - 更改 react 状态的单个变量

sql - 获取 PostgreSQL 数据库中的分区数