【发布时间】:2011-05-23 22:57:45
【问题描述】:
我最近了解到 switch 语句在 OOP 中很糟糕,特别是来自 Robert Martin 的“Clean Code”(p37-39)。
但是考虑一下这个场景:我正在编写一个游戏服务器,接收来自客户端的消息,其中包含一个表示玩家动作的整数,例如移动、攻击、拾取物品......等等,会有超过 30 种不同的行动。当我编写代码来处理这些消息时,无论我想到什么解决方案,它都必须在某个地方使用 switch。 if not switch 语句应该使用什么模式?
【问题讨论】:
-
参见 [Large Switch 语句:糟糕的 OOP? ](*.com/questions/505454/…)
-
'“被认为有害”被认为有害'。
-
@Aaron,经常添加一个类可以最大限度地减少必须更改的现有代码量。如果您的代码依赖于已经存在的特定类,那么这些可能是 switch 语句(或多分支 if/then/else),其中每一个都需要更改
-
@Aaron,在您的交换机上添加
case时,您需要进行回归测试并为同一类开发更多测试用例。而添加另一个类不需要开发那么多测试,因为它是一个“新功能”,并且您不会触及任何现有源,这取决于您如何加载新类(也称为反射),否则回归测试会有实例化代码也要这样做 -
@Aaron - 当然,如果应用程序很小或者不太可能发生太大变化,那么切换可能会更清晰。有时“goto”也可以。我只是指出,人们说添加一个类与添加一个开关在质量上是不同的,这是有充分理由的
标签: oop design-patterns coding-style switch-statement