gpt4 book ai didi

c# - 大 Switch 语句 : Bad OOP?

转载 作者:IT王子 更新时间:2023-10-29 03:40:50 25 4
gpt4 key购买 nike

我一直认为大型 switch 语句是糟糕的 OOP 设计的症状。过去,我读过讨论这个主题的文章,它们提供了基于 OOP 的替代方法,通常基于多态性来实例化正确的对象来处理这种情况。

我现在的情况是有一个基于来自 TCP 套接字的数据流的巨大 switch 语句,其中协议(protocol)基本上由换行符终止的命令组成,后跟数据行,然后是结束标记。该命令可以是 100 个不同命令中的一个,所以我想找到一种方法将这个庞大的 switch 语句减少到更易于管理的状态。

我进行了一些谷歌搜索以找到我记得的解决方案,但遗憾的是,如今谷歌已成为许多查询的不相关结果的荒地。

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

我的一个想法是使用字典查找,将命令文本与要实例化的对象类型相匹配。这有一个很好的优势,即只需创建一个新对象并在表中为任何新命令插入一个新命令/类型。

但是,这样也存在类型爆炸的问题。我现在需要 100 个新类,而且我必须找到一种方法将它们干净地连接到数据模型。 “一个真正的 switch 语句”真的是可行的方法吗?

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

最佳答案

您可能会从 Command Pattern 中得到一些好处.

对于 OOP,如果行为变化足够小,您可以将几个相似的命令分别折叠到一个类中,以避免整个类爆炸(是的,我已经听到 OOP 大师们尖叫了)。但是,如果系统已经是 OOP,并且 100 多个命令中的每一个都是真正独特的,那么只需将它们设为独特的类并利用继承来巩固共同的东西。

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

关于c# - 大 Switch 语句 : Bad OOP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/505454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com