【问题标题】:Coding practice: how to avoid hard coding?编码实践:如何避免硬编码?
【发布时间】:2009-05-16 19:22:12
【问题描述】:

我在数据库中有一个存储4个类别的表,表的结构是ID(GUID),描述。我将类别加载到下拉列表(asp.net webform)中,以允许人们根据他们选择的内容来选择一个类别。然后,我将显示与他们的选择相关的信息并隐藏其他信息。

目前,我根据我在代码中硬编码的 GUID 执行“选择案例”以显示相关信息。有没有更好的方法来做到这一点,而无需在 GUID 中的硬代码后面的代码?

【问题讨论】:

    标签: asp.net database webforms


    【解决方案1】:

    Guid/Description 关联的数据是什么...

    您硬编码的数据听起来像是被添加到数据库本身的候选对象。

    如果它是每个Category/Guid 的一条信息,那么请考虑扩展您的数据库表以存储该信息。

    如果每个Category/Guid 包含多条信息,则考虑创建一个带有CategoryID 的新表,以及Category 表和ExtraInfo 表之间的外键关系

    【讨论】:

    • 问题不在于表。 guid 是表中的主键,而描述是类别的名称。我想根据类别 ID (GUID) 确定用户选择的类别,然后根据用户选择的内容显示隐藏面板。硬代码部分是类别 ID,我可以在其中确定应显示哪个面板。这有意义吗?
    • 所以您的数据库表中有 6 个 GUID/类别...并且您的 ASP.NET 页面上有 6 个单独的面板?好吧,您可以做 2 件事中的 1 件事,您可以将面板 ID 添加到数据库表中,或者将面板命名为便于将类别名称转换为面板 ID。例如Category="The First Category" / PanelID = "pnlTheFirstCategory" - 这样您就可以通过编程方式去除 categoryName 中的空格,搜索面板并使其可见...或其他内容
    【解决方案2】:

    您可以在应用启动时查询数据库中的 GUID,并将它们缓存在静态 Dictionary 中。

    【讨论】:

      【解决方案3】:

      您可以将 GUID 存储在您的网络配置中并在运行时加载它。然后,您可以轻松地用另一个 GUID 替换该 GUID,而无需重新编译。

      【讨论】:

      • 有没有办法避免硬编码?您的建议与我的解决方案相同,希望您将其放在 web.config 上。我想好的一面是你只需要在一个地方编辑。如果不对这些类别 GUID 进行硬编码,就没有办法吗?
      • 正如许多其他人所建议的那样,并非没有将其保存在其他地方。
      【解决方案4】:

      您应该有一个Categories 表和一个Posts 表(或者您将使用您的类别标记的任何内容)。在Posts 表中,CategoryID 有一列(假设每个帖子只能属于一个类别),因此您只有一个位置的类别名称(标准化您的数据)。

      当您呈现下拉列表时,您从数据库中选择 GUID:s。没有硬编码,如果您添加另一个类别(或删除一个类别),下拉列表将自动反映可用类别。

      【讨论】:

        【解决方案5】:

        如果您将下拉列表绑定到类别行或包含类别名称和值的元组,您可以使用SelectedValue 属性在代码隐藏中加载Guid。然后,您将在下拉列表中设置 DataTextFieldDataValueField

        【讨论】:

          猜你喜欢
          • 2022-10-31
          • 1970-01-01
          • 2018-11-19
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-11
          • 2011-01-01
          相关资源
          最近更新 更多