管理大量常量的最佳方法是什么

What is the best way to manage a large quantity of constants

我目前正在开发一个非常复杂的程序,该程序处理来自输入 table 的行并且每条记录都有大量可能的结果。因此,我为结果消息定义了大量常量。有一条成功消息可供记录,但可能有大量警告和错误。

我的第一个想法是在包主体级别定义这些消息的所有常量,但后来我决定将每个常量移动到使用它的过程中。我现在正在猜测这个决定并考虑将所有内容移回包体级别。定义这么多常量的最佳方法是什么?易于维护是我对这个程序的最终目标,因为它是如此复杂。

我认为这是一个品味问题。在我的应用程序中,我将所有错误代码放入错误包中。所有主要和常用的常量我都放在一个单独的包中(没有包体)。

同样,这是个人喜好问题,但我倾向于在包规范级别而不是包主体中放置命名常量列表,以便应用程序的任何部分都可以引用它们。如果我想更改 c_err_for_specific_reason_x 使用的错误代码,它就变成了一个地方。

如果我想隐藏代码并将它们放在正文中,我将有一个 get_error_code(p_get_error_name varchar) 函数,该函数根据您传递的有效常量名称进行翻译。

我在不同的项目上都做过,但大多数时候倾向于列表而不是函数。如果它是 table 驱动的数据源,我倾向于使用该函数。

它...等等...取决于!

由于您目前在包体中定义了常量,因此您不需要在包外公开访问它们。所以在规范中定义它们真的不会给你带来任何好处。

这是我遵循的规则:在所需的最小范围内定义常量。因此,如果常量仅在一个过程中使用,请在该过程中定义它。如果它在多个过程中使用,请在正文中定义它。如果它被其他包(或未打包的 SP)中的代码在别处使用,但仅在使用特定包时使用,请在该包的规范中定义它。如果它被其他代码用于一般用途,请将其放在此类通用常量的单独规范中。