1

私はよくこのようなコードを見ます:

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、継承せずに使用することはできません。また、パラメーターを指定するためだけにクラスを継承する必要があるのも奇妙です。また、それを置くだけで動作が遅くなります。コンストラクターを介したパラメーター。

しかし、このアンチパターンの名前が見つかりません。

誰か知っていますか?

4

2 に答える 2

6

はい、それはアンチパターンです。抽象クラスは、派生クラスがどのように機能するかをすでに義務付けています。ここでは、単一のクラスよりもクラス階層に利点はありません。

代わりに抽象クラスが純粋仮想関数を呼び出してを取得するStreamReader場合、それは理にかなっています。次に、さまざまな派生クラスをファイル、ネットワークストリーム、または動的に生成されたデータに添付できます。

ここでのアンチパターンは、「オープンクローズ原則の違反」(SOLIDの2番目の部分)です。

于 2012-06-20T15:37:02.073 に答える
0

はい・いいえ。

私には、これはセッターインジェクションを抽象化する試みのように見えますが、それが良い考えかどうかはわかりません。それは物事を不明確にし、投稿されたコードにつながりますが、セッターインジェクション自体はアンチパターンではありません。

于 2012-06-20T15:45:48.360 に答える