Как называется эта плохая практика / анти-шаблон?

Я пытаюсь объяснить своей команде, почему это плохая практика, и ищу ссылку на анти-шаблон, чтобы помочь в моем объяснении. Это очень большое корпоративное приложение, поэтому вот простой пример, чтобы проиллюстрировать, что было реализовано:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        var listOfThingsThatSupportX = new string[] {"ThingA","ThingB", "ThingC"};
        foreach (var thing in listOfThings)
        {
            if(listOfThingsThatSupportX.Contains(thing.Name))
            {
                DoSomething();
            }
        }
    }

Я предлагаю добавить свойство в базовый класс 'Things', чтобы сообщить нам, поддерживает ли он X, поскольку подкласс Thing потребуется реализовать рассматриваемую функциональность. Примерно так:

public void ControlStuff()
    {
        var listOfThings = LoadThings();
        foreach (var thing in listOfThings)
        {
            if (thing.SupportsX)
            {
                DoSomething();
            }
        }
    }
class ThingBase
{
    public virtual bool SupportsX { get { return false; } }
}
class ThingA : ThingBase
{
    public override bool SupportsX { get { return true; } }
}
class ThingB : ThingBase
{
}

Итак, довольно очевидно, почему первый подход - плохая практика, но как это называется? Кроме того, есть ли шаблон, более подходящий для этой проблемы, чем тот, который я предлагаю?

44
задан John Cornell 6 October 2011 в 07:01
поделиться