我一直在读一本书叫Clean Code A Handbook of Agile Software Craftsmanship .书中的作者认为应该避免使用 switch 语句,如果无法避免,则应将其降级为工厂方法。我有一个连接对象,它正在接收各种 PDU(协议(protocol)数据单元)。 PDU 各不相同,可以按任何顺序接收。因此,如果我有一个方法,例如:
public BasePdu ReceiveNext();
因为在完全接收之前我无法判断数据包类型是什么。在 PDU 的 header 中是关于它应该是哪种类型的标识符。这意味着调用方法将确定 PDU 的类型,并根据该类型调用相关方法来处理它。这听起来像是 switch 语句的完美示例。理想情况下,包含连接的对象有两个线程。一个用于接收 PDU,另一个用于服务要发送的 PDU 队列。
现在我知道您无法遵循所有好的建议,并且只有某些情况是规则的异常(exception)。这是其中之一吗?或者有没有我还没有想到的解决方法。
更新:
我听到很多人都在说创建响应处理程序的子类。问题是包含对象有很多上下文和处理程序需要的附加信息,例如查找和限制等。将所有这些信息注入(inject)处理程序的子类将是一件很麻烦的维护工作,并且还会拆分一个当封装在它现在所在的对象中感觉更好时,很多逻辑就会上升。
最佳答案
就个人而言,我不会太担心它;如果它看起来像 switch 语句的好地方,请使用一个。另一方面,如果每个 PDU 类型由类而不是方法处理,这看起来也像是可以使用工厂方法的情况。而且,根据你的书,你可以使用 switch 语句
关于c# - 如果调用方法不知道返回类型,如何避免 switch 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094343/