知识卡片
DNS解析案例揭示责任链模式误用为触发链场景的缺陷
内容
[[责任链模式消息结构不变触发链允许消息形态转化]]不只是理论区分,用责任链实现 DNS解析会产生真实缺陷:让请求沿链传递、谁能解析谁直接返回结果,但真实DNS协议要求 结果永远由第一个节点统一签名返回。这正是触发链结构:请求者是被观察者,逐级通知再逐级 署名转交回首节点。发散:选错链式模式不是抽象风格问题,会直接导致”谁对外应答”这类 行为语义出现真实功能性缺陷。
参考来源
- 位置:《设计模式之禅(第2版)》第32章《行为类模式大PK》32.3.1-32.3.2节(源文件:_epub-src/text/part0145.html)
- 结论依据:原文先用责任链模式实现DNS解析并指出"这个解析过程是有缺陷的",因为真实DNS协议中"不管一个域名最终由谁解析,最终反馈到请求者的还是第一个节点,也就是说首节点负责对请求者应答,其他节点都不与请求者交互,而只与自己的左右节点交互",随后改用观察者触发链模式重新实现,验证"所有的解析结果都是由上海DNS服务器返回的,这才是真正的DNS解析过程"。
- 原始内容:我可以负责任地告诉你:这个解析过程是有缺陷的……不管一个域名最终由谁解析,最终反馈到请求者的还是第一个节点,也就是说首节点负责对请求者应答,其他节点都不与请求者交互,而只与自己的左右节点交互……所有的解析结果都是由上海DNS服务器返回的,这才是真正的DNS解析过程。