1

簡単に言うと、次のようなファクトリを作成しています。

    public static ITag GetByTagName(string tagName)
    {
        tagName = tagName.ToLower();
        switch (tagName)
        {
            case "devicevar":
                return new DeviceVar();
            case "devicefilter":
                return new DeviceFilter();
        }
        return null;
    }

tagNameしかし、ITag に対応するかどうかをチェックするメソッドも必要です。GetByTagName基本的に、実際に実行せずに null を返すかどうかを確認しています。

private List<string> tagNames = new List<string> { "devicevar", "devicefilter" };

public static bool IsValidTagName(string tagName)
{
    return tagName.Contains(tagName);
}

そこに醜い重複があるのがわかりますか?可能な値を2回指定したくありませんtagName。ファクトリを使用して ITag のインスタンス化を試行し、null が返された場合は、それが有効な値ではないことがわかるように、いつでもメソッドを変更できます。しかし、これは無駄に思えます:

public static bool IsValidTagName(string tagName)
{
    return GetByTagName(tagName) != null;
}

もっと良い方法があるに違いない

ノート:

私には、このチェックを行う必要がある正当な (長ったらしい) 理由がありますが、そうではありません。

「この文字列を指定すると、GetByTagName は ITag を返しますか? はい? わかりました。GetByTagName を呼び出します」

4

2 に答える 2