处理遗留代码时的差异与注意事项
刚开始接触 ObjectScript 时,我编写的大部分代码都遵循了 InterSystems 的现代编程模式。我使用类、方法、REST 服务、互操作性生产、JSON 对象以及 %Status 值。
与此同时,我负责维护的生产系统中,很大一部分代码采用的编写风格却截然不同。
该系统使用了例程、标签、global、缩写命令、“点-do”语法、共享局部变量以及错误处理模式——这些在基于类的 ObjectScript 普及之前就已经存在了。
起初,我曾以为这仅仅是旧语法与新语法的区别。随着时间的推移,我意识到最大的差异并非表面上的。传统的MUMPS风格代码与现代ObjectScript在变量作用域、执行层级、数据流和错误处理方面往往基于不同的假设。这种区别至关重要,因为旧代码很容易被误读。
某个例程看似未接收任何参数,却依赖于调用者创建的多个变量;某个标签在某处表现得像一个过程,在另一处却表现得像一个函数;一个点块(dot block)虽然会创建另一个执行层级,却可能看起来像缩进;一段代码在移入类后虽然能编译通过,但在运行时却可能表现得截然不同。
代码看起来依然很熟悉。语言依然是 ObjectScript。然而,它可能已经发生了变化。
本文介绍了我在处理遗留代码并将其与更现代的 ObjectScript 应用程序集成时所遇到的一些最重要的差异。
.png)
.png)
.png)