默认值:硬编码或.config文件?

时间:2011-10-07 15:40:12

标签: c# asp.net configuration web-config default-value

我正在开发一个解决问题的应用程序,网站用户输入通过WCF服务发送到管理控制台的问题,支持代理开始处理问题。

当问题出现时,它们按照projectID和categoryID分组

来自特定网站的所有问题应该具有相同的默认项目和类别ID。

问题:

此时尚不清楚这些默认值应该是什么,因为项目和类别是由支持代理管理员在将来的某个时间在管理控制台中输入的。 (这些都尚未部署,我和支持团队之间的会议不可能敲定这些细节)

问题:

处理这些默认值的最佳方法是什么?到目前为止我考虑过的事情:

1)硬编码。硬编码的问题在于部署后很难更改值。

2)在.config文件中粘贴em。这很灵活,可以在部署后轻松更改内容,但我觉得它很优雅(或者至少它只是感觉到我的方式)

如果你有任何类似的经历,或者只是很好的见解和建议,我很乐意听到它!谢谢,

6 个答案:

答案 0 :(得分:3)

您甚至可以考虑更进一步,将默认值存储在数据库中。这将提供配置的灵活性和对这些默认值的集中管理。

就个人而言,我可能经常采用的方法是在代码中配置我的配置,但能够通过在配置文件或Db中提供新值来覆盖默认值。为什么我走这么远?这样,我可以使用最少的配置进行部署,然后在需要时提供覆盖。

答案 1 :(得分:2)

由于您无法在部署时知道这些值应该是什么,因此您应该在配置中使用它们。您可能会发现它不够优雅,但如果没有代码更改可能需要更改值,这是唯一的选择。

除非您知道部署快速简便,并且可以快速且无错误地部署任何代码更改。

答案 2 :(得分:1)

您还可以将它们存储在存储问题跟踪数据的数据库中。

答案 3 :(得分:1)

首先,硬编码合理的默认值以保持弹性。没有人喜欢没有那么严格必要的文本文件而无用的程序。

其次,配置文件根本不是处理自定义配置的不雅方式。根据您要部署的环境,提供gui配置工具是另一种选择。即最终用户是否会在你的飞行中改变配置?或者系统管理员是否会进行计划更改?

答案 4 :(得分:1)

将它们置于配置中可能是最佳选择。如果您希望有一个很好的方法来访问它们,您可以创建一个静态类,充当访问者或使用依赖注入等。

示例访问者类:

public static class DefaultSupportValues
{
    public static string ProjectID
    {
        get
        {
            return ConfigurationManager.AppSettings["DefaultProjectId"];
        }
    }
}

答案 5 :(得分:1)

我认为您未列出的第三个选项是将它们放在数据库中。您可以使用各种缓存策略来解决性能问题。这种方法的好处是您可以在一台或多台服务器上托管您的应用程序,而不必为它们更新配置更改。

根据我的经验,这是针对这些案例的最佳方法。