【问题标题】:Using constants for message keys and database table names and column names对消息键和数据库表名和列名使用常量
【发布时间】:2009-10-05 11:28:36
【问题描述】:

最近,在代码审查会议期间,关于常量的使用发生了一场大辩论。 开发人员将常量用于以下目的:

  1. i18N 应用程序中使用的每个消息键都被声明为常量。该应用程序包含大约 3000 个消息键,因此常量数量相同。
  2. 每个数据库列名都被声明为常量。大约有 5000 个列名,而且还在增加中。

在任何应用程序中拥有如此大量的常量是否有意义? 恕我直言,常识应该占上风。消息键不需要声明为常量。我们已经有了一层间接性——为什么还要再增加一层?

注册。数据库列名,我有不同的意见。如果一个列在多个类中使用,将其声明为全局常量是否有意义?

请说出你的想法...

【问题讨论】:

    标签: constants


    【解决方案1】:

    如果 I18N 消息键未定义为常量,您如何强制执行一致性?您如何自动区分拼写错误和缺失值?您如何审核以确保每个新语言文件中的所有 I18N 密钥都得到满足?

    至于数据库列,您绝对可以使用一些间接方式——如果您的应用程序知道列名,那么您就会遇到绑定问题。因此,您可能会考虑使用实际列名的配置文件 - 但当然,您会希望通过符号键引用列名,它应该定义为可审计的常量,就像 I18N 键一样。

    【讨论】:

      【解决方案2】:

      我认为将用于 i18N 的消息键作为常量放置是一种很好的做法。 如果你有一个设计良好的持久层,我看不出对 DB 列做同样的事情有什么好处。

      【讨论】:

        【解决方案3】:

        我认为这取决于编程语言。

        在 PHP 中,ude 为此类事物定义 aka contants 并不少见,而我不会在 Java 或 C# 中使用它。

        在大多数项目中,我们尝试将 SQL 提取到模板中,因此不仅可以配置表名和列名,还可以配置整个 sql 语句。我们将速度用于基本的模板机制,如变量、小循环......

        关于语言常量: 另一层对我来说没有多大意义,但是您必须仔细选择语言翻译的标识符。如果您在不改变含义的情况下修复例如英文句子中的措辞,则使用整个英文句子作为关键可能最终会给翻译人员带来大量工作。所以所有翻译人员都必须更新他们的文件。

        【讨论】:

          【解决方案4】:

          如果常量用在多个地方并且编译器确实能解决问题,是的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-10-16
            • 2018-08-31
            • 1970-01-01
            • 2011-02-11
            • 1970-01-01
            • 1970-01-01
            • 2013-04-11
            相关资源
            最近更新 更多