selectAction: (actionEvent) => {
if (actionEvent instanceof Action1) {
// action1 body implementation
} else if (actionEvent instanceof Action2) {
// action2 body implementation
}
}
上面的代码片段反映了执行不同功能的不同类型的动作。我使用if和else条件检查动作。
我觉得这不是一个好的解决方案,因为将来我可能会采取更多行动,并且if-else-ladder会不断增长,并且当发生更改时我需要再次更新代码。
有什么想法可以改善这种特定情况吗?
答案 0 :(得分:2)
使用鸭子输入的方法来避免有条件的情况。 Source
每个类型实例selection()
和Action1
内都有一个名为Action2
的方法,并使用该方法定义要构建的主体/所需功能。只需调用selection()
方法来避免情况。因此,根据类型的实例,它将调用相应类型的正确selection()
方法
答案 1 :(得分:1)
在TypeScript中使用if
/ else
并不是天生的错误。
但是,当您使用instanceof
时,很可能您可能有更好的选择。在这种情况下,几乎可以肯定,动作本身应该负责做他们所做的事情:
selectAction: (actionEvent) => {
actionEvent.execute();
}
...或
selectAction: (actionEvent) => {
const action = /*...derive action from actionEvent...*/;
action.execute();
}
...或类似内容(或者,当然,直接使用actionEvent.execute()
代替selectAction
)。
这是基本的多态性,具有不同的对象符合相同的接口,并且在调用时(可能)执行不同的操作。