小编典典

大型Switch语句:糟糕的OOP?

c#

我一直认为,大型switch语句是OOP设计不良的征兆。过去,我读过讨论该主题的文章,他们提供了基于OOP的替代方法,通常基于多态来实例化处理该案例的正确对象。

我现在处在一种奇怪的switch语句的情况下,该语句基于来自TCP套接字的数据流,其中该协议基本上由换行符终止命令,随后的数据行和结束标记组成。该命令可以是100个不同命令中的一个,因此我想找到一种方法来将这个怪物切换语句减少到更易于管理的位置。

我已经进行了一些谷歌搜索来找到我记得的解决方案,但可悲的是,如今,对于许多类型的查询,Google已经变成了无关紧要的结果。

有没有解决此类问题的模式?关于可能的实现有什么建议吗?

我曾经想到的是使用字典查找,将命令文本与要实例化的对象类型进行匹配。这具有仅创建一个新对象并在表中为任何新命令插入新命令/类型的优点。

但是,这也存在类型爆炸的问题。现在,我需要100个新类,此外,我还必须找到一种将它们干净地连接到数据模型的方法。“一个真正的转换声明”真的可行吗?

非常感谢您的想法,意见或评论。


阅读 285

收藏
2020-05-19

共1个答案

小编典典

您可以从Command Pattern中获得一些好处。

对于OOP,如果行为变化足够小,则可以将几个类似的命令折叠到一个类中,以避免整个类爆炸(是的,我已经听说过OOP专家已经对此大喊大叫了)。但是,如果系统已经是OOP,并且100多个命令中的每一个都是真正唯一的,则只需使它们成为唯一的类并利用继承的优势来合并常用的东西。

如果系统不是OOP,那么我不会仅为此添加OOP …您可以轻松地通过简单的字典查找和函数指针使用Command
Pattern,甚至可以根据命令名称动态生成函数调用,具体取决于语言。然后,您可以将逻辑上相关的功能分组到代表相似命令集合的库中,以实现可管理的分离。我不知道这种实现是否有很好的用语……我一直认为它是一种基于MVC处理URL的“调度程序”风格。

2020-05-19