当 if-else 长成一棵树:用策略模式重构 OnlyOffice 回调处理

问题从哪里开始 项目里集成了 OnlyOffice 文档编辑器,功能挺好用,但回调处理这块慢慢变成了"噩梦"。 OnlyOffice 会推送各种回调,比如用户保存文档、强制保存、文档关闭等等。每种回调有不同的 status 字段,对应不同的处理逻辑。一开始代码写得很"朴素": // FileServiceImpl.java - 曾经的模样 public void onlyOfficeCallback(OnlyOfficeCallbackDTO callbackDTO, File file) { if (callbackDTO.getStatus() == 2) { if (callbackDTO.getActions() != null && callbackDTO.getActions().stream().anyMatch(a -> a.getType() == 0)) { // 保存逻辑:下载文档、更新文件... // 几十行代码 } } else if (callbackDTO.getStatus() == 6) { // 强制保存逻辑 // 又是几十行代码 } else if (callbackDTO.getStatus() == 1) { // 正在编辑... } else if (...) { // 更多分支... } } 然后还有 Command 调用——主动向 OnlyOffice 发命令的逻辑,也堆在同一个 Service 里: public void sendCommand(String command, Map<String, Object> params) { if ("forcesave".equals(command)) { // 强制保存命令逻辑 } else if ("info".equals(command)) { // 获取信息命令逻辑 } // 更多分支... } 问题来了: ...

November 13, 2025 · 后端开发 / 设计模式 · 3 min · 559 words · map[email:onetick@live.cn name:Hongyu]