我试图向我的团队解释为什么这是不好的做法,并且正在寻找反模式参考来帮助我的解释。这是一个非常大的企业应用程序,因此这里有一个简单的示例来说明所实现的内容:
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
{
}
那么,很明显为什么第一种方法是不好的做法,但这叫什么?另外,是否有一种模式比我建议的模式更适合这个问题?
通常更好的方法(恕我直言)是使用接口而不是继承
那么只需检查对象是否实现了接口即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)