把 Ketcher 装进桌面软件:
一次关于复用的技术选择
我们为什么不重写一个分子编辑器,以及复用的代价在哪里。
分子结构绘图软件的技术路线确定后,我们面对的第一个问题不是“怎么画”,而是“哪些东西不该由我们画”。
先决定不做什么
一个化学编辑器包含原子、键、环、立体化学、反应、格式转换、布局与渲染。从零实现这些能力,对一个以本科生为主、人员会流动的团队来说并不现实。
Ketcher 是一个成熟的开源结构编辑器,采用 TypeScript、React 与 WASM,支持常见的化学格式与本地计算。它采用 Apache-2.0 许可,允许在保留声明的前提下复用和分发。我们决定把它作为绘图核心,而不是重新发明一套。
一套核心,多端外壳
我们的架构把绘图、格式处理与化学计算放在共享的 Web 核心中。桌面端使用 Electron 承载,移动端计划使用 Capacitor。平台差异被收敛到文件系统、剪贴板、窗口与菜单等外壳能力,绘图逻辑只写一次。
离线优先是另一条硬约束。核心计算使用本地 Indigo WASM,断网时仍然可以完成绘图、格式转换与布局;云端服务只作为增强,而不是启动前提。
最难的为什么是 Office
把结构复制到 Word 或 PowerPoint 并不难,难的是让粘贴后的对象可以被双击、重新打开编辑并写回文档。这依赖 Windows 的 OLE 嵌入机制,需要实现一组 COM 接口,并处理安装、注册与卸载。
我们把它拆成三级:先做矢量图与私有格式的剪贴板复制,再评估简化 OLE 服务器,最后用 Office Web 加载项覆盖 macOS、网页版与移动端。第一级是所有平台的基础,风险最低;第二级难度最高,必须单独排期。
复用不是免费
复用解决了大部分绘图问题,但也带来新的约束:
- 上游升级可能改变内部行为,需要回归测试与版本锁定。
- 官方扩展点覆盖不到的需求,可能需要 patch,并承担合并成本。
- 许可证与版权声明必须随分发保留。
- 编辑器的交互习惯已经存在,产品设计要在尊重它的前提下改进。
这些约束不是拒绝复用的理由,而是选择复用后必须承担的工作。对一个小团队来说,把精力放在外壳、文件能力与真实使用体验上,比重写一个编辑器更有可能做出可用的东西。
