【发布时间】:2018-07-26 13:34:28
【问题描述】:
selectAction: (actionEvent) => {
if (actionEvent instanceof Action1) {
// action1 body implementation
} else if (actionEvent instanceof Action2) {
// action2 body implementation
}
}
上面的代码 sn-p 反映了不同类型的动作,它执行不同的功能。我使用 if 和 else 条件来检查动作。
我觉得这不是一个好的解决方案,因为我将来可能会有更多的操作,而且我的 if-else-ladder 会不断增长,当有变化时我需要再次更新我的代码。
对改进这个特定场景有什么想法吗?
【问题讨论】:
-
应该是
actionEvent.select()。使其成为Action接口的方法。 -
action2和action1是什么?这些实际上是否应该与传递给方法的参数相同(actionEvent)? -
action1和action2来自哪里,你的意思是actionEvent? -
视情况而定,一如既往。这个列表可能会增长吗?或者它是一个特定的有限列表。例如,如果您正在处理内置类型,因为您正在编写 JSON 编码器,那么要使用的类型列表是有限的,这将是一种合适的方法。 OTOH,如果类型不受定义限制,那么使用接口和
actionEvent.someAction()会更有意义。细节在这里很重要。 -
请避免
Is is bad或is it good或what better way to do X问题。不好怎么办?好如何?在您的情况下,您希望提高可维护性。在某些项目中,if-else-ladder 足够好。它本质上并不坏。
标签: javascript typescript if-statement instanceof