簡単に言うと、次のようなファクトリを作成しています。
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 を呼び出します」