我经常看到这样的代码:
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
而不继承它,我也必须继承该类只是为了指定参数和我的工作速度也比较慢,只需将参数放在构造函数中即可。
但我找不到这种反模式的名称。
有人知道吗?
答案 0 :(得分:6)
是的,这是一种反模式。抽象类已经强制派生类如何工作,这里对于单个类的类层次结构没有任何优势。
如果抽象类调用纯虚函数来获取StreamReader
,那么它就有意义了。然后,不同的派生类可以附加到文件,网络流或动态生成的数据。
这里的反模式是“违反开放原则”(SOLID的第二部分)。
答案 1 :(得分:0)
是/否。
对我而言,这看起来像是抽象二传手注射的尝试,我不确定这是一个好主意。它使得事情不清楚并导致代码发布,但是setter注入本身并不是反模式。