Scala 遗留代码:如何在执行路径的不同点访问输入参数?
Scala legacy code: how to access input parameters at different points in execution path?
我正在使用遗留的 scala 代码库,并且一如既往地修改代码而不触及不同部分是非常困难的。
我的新要求之一是根据一些输入参数做出多项决定。问题是这些决定将在执行过程中的不同时间点做出。所以要么我将所有这些参数封装在一个 case class 实例中并传递它。但这意味着我将不得不修改多个方法签名,我想尽可能避免这种做法。
另一种方法是创建一个全局对象,其中包含所有这些输入参数并可从执行过程中的不同点访问。在 Scala 中这是一个好的方法吗?
不,使用全局可变变量传递“隐藏”参数不是一个好主意,在 Scala 中不是,在任何其他编程语言中也不是。它使代码难以理解和修改,因为函数的行为现在将取决于之前调用的函数。而且它非常脆弱,因为您可能会忘记在调用该函数之前设置其中一个全局参数,这意味着它将使用之前存储在那里的任何值。这种东西看起来可以工作多年,然后当您修改程序中完全不相关的部分时就会中断。
我怎么强调都不为过:不要使用全局可变变量,句号。解决方案是手动更改这些方法签名。根据详细信息,依赖注入可能对您的特定情况有帮助,也可能没有帮助。
我正在使用遗留的 scala 代码库,并且一如既往地修改代码而不触及不同部分是非常困难的。
我的新要求之一是根据一些输入参数做出多项决定。问题是这些决定将在执行过程中的不同时间点做出。所以要么我将所有这些参数封装在一个 case class 实例中并传递它。但这意味着我将不得不修改多个方法签名,我想尽可能避免这种做法。
另一种方法是创建一个全局对象,其中包含所有这些输入参数并可从执行过程中的不同点访问。在 Scala 中这是一个好的方法吗?
不,使用全局可变变量传递“隐藏”参数不是一个好主意,在 Scala 中不是,在任何其他编程语言中也不是。它使代码难以理解和修改,因为函数的行为现在将取决于之前调用的函数。而且它非常脆弱,因为您可能会忘记在调用该函数之前设置其中一个全局参数,这意味着它将使用之前存储在那里的任何值。这种东西看起来可以工作多年,然后当您修改程序中完全不相关的部分时就会中断。
我怎么强调都不为过:不要使用全局可变变量,句号。解决方案是手动更改这些方法签名。根据详细信息,依赖注入可能对您的特定情况有帮助,也可能没有帮助。