我一直在研究开放封闭原则,听起来不错,所以我想练习它的教义。我看着将我新发现的知识应用到现有项目中,并立即变得有点卡住了。
如果出现一个新的 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");
}
}
谢谢,科汉