Принцип открытости / закрытости - что делать с этим переключателем?

Я изучал принцип «открытость-закрыто», и это звучит хорошо, и поэтому я хотел применить его учение. Я посмотрел на применение моих новых знаний к существующему проекту и сразу немного застрял.

Если появится новый UserType (и это очень вероятно), его нужно будет изменить, он еще не закрыт к модификации. Как можно обойти это?

Судя по тому, что я прочитал, мне следовало бы реализовать здесь фабрику вместо применения OCP?

Фабрика, которая нарушает принцип «Открыто-закрыто»

 private void BuildUserTree(User user)
    {
        switch (user.UserType)
        {
            case UserType.FreeLoader:
                BuildFreeLoaderTree();
                break;
            case UserType.Premium:
                BuildPremiumTree();
                break;
            case UserType.Unlimited:
                BuildUnlimitedTree();
                break;
            default:
                throw new Exception("No UserType set");

        }
    }

Спасибо, Кохан

5
задан Community 23 May 2017 в 11:58
поделиться