我继承了一些代码,其中有一个 500 行的 switch 语句。基本上,它会打开一个 string
任务并执行相应的操作。
从那以后,我将每个 case 语句移动到新类中它们自己的方法中。巨大的 switch 语句仍然存在,但不是内联逻辑,每个 case 只是调用一个方法,因此它更简洁。
问题是这些方法修改了很多不同的东西。 50% 的方法需要传入 0 个参数。大约 40% 需要 5 个参数,其余 10% 每个方法需要 10 个参数。
目前这个有效但我想让它变得更好。要么去掉 switch 语句,要么以某种方式减少传入参数的数量。
我正在考虑使用将 string
映射到 Action
的 Dictionary
来消除整个开关,但这行不通因为我使用了很多 ref 参数(原始类型)并且没有办法将它们传递给构造函数并在以后对它们进行引用修改。
该问题的明显解决方案是将所有 16 个左右的变量放入一个单独的类中并传递它,但其中很多不是很相关,所以它只是用另一个问题替换一个问题(长参数列表不-内聚数据类)。
想知道是否有任何其他方法可以改进此代码。感谢阅读。
最佳答案
由于您的问题不包含任何代码,因此答案也不可能。我认为最好的办法是将您指向有史以来最好的软件书籍之一的第 82 页:Refactoring: Improving the Design of Existing Code .
“面向对象代码最明显的症状之一是它相对缺乏 switch 语句。大多数时候,当您看到 switch 语句时,您应该考虑多态性。”
然后他列出了一些用于帮助实现这一目标的特定模式。
关于c# - 如何重构这个巨大的 switch 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12926518/