知识卡片
命令对象化避免字符串命令缺乏约束力
内容
旅行社项目最初让Invoker接收String类型命令字符串再判断该通知哪个组,但字符串没有约束 力——拼写错误、语义歧义难以在编译期发现。解法是把每个命令封装成独立的Command对象, 对象自带execute()方法知道该协调哪些接收者。发散:这是”魔法字符串反模式”的反例,用字符串 编码业务意图把编译期保证转移成了运行时才发现的错误。
参考来源
- 位置:《设计模式之禅(第2版)》第15章《命令模式》(源文件:_epub-src/text/part0067.html)
- 结论依据:原文分析用String命令字符串通知Invoker存在"字符串没有约束力,根据字符串判断相关的业务逻辑不是一个优秀的解决方案",转而"对客户发出的命令进行封装,每个命令是一个对象"。
- 原始内容:客户的命令是一个String类型的,这有非常多的变化,仅仅通过一个字符串来传递命令并不是一个非常好的方案,因为在系统设计中,字符串没有约束力……解决方案是:对客户发出的命令进行封装,每个命令是一个对象。