2008-09-25 55 views
1

你的应用程序的哪些部分没有编码? 我认为最明显的例子之一就是数据库凭据 - 硬编码被认为是不好的。在大多数情况下,很容易决定是否需要外部化或编码。对我而言,规则很简单。应用程序的某些部分应外在如果:你喜欢将哪些应用程序部件外化为配置,为什么?

  1. 它可以而且应该由非开发改变了,但经常被包含在UI定义的应用程序设置(DB凭证,服务URL等)
  2. 它不需要编程语言,似乎不自然被编码(本地化)

你有什么要补充的?

这与this question about spring cfg有点相关。 Spring配置对我来说似乎不太明显,因为在我的实践中,除开发人员之外,其他任何人都不会修改它。外化的道路可以让你远离,整个项目被“配置”,而不是编码 - 所以在哪里停止?

所以,请张贴在这里从你的经验,当你从有得配置,而不是编码效益一些例子 - 在春天像依赖注入配置等 如果你使用的弹簧 - 如何往往配置而无需重新编译改变了吗?

回答

1

路径和服务器名称/地址浮现在脑海..

5

任何需要你的应用程序的不同部署之间的不同。也就是说,任何特定于环境的东西。

例子包括:

  • 数据库连接字符串
  • 网址,网页或WCF服务
  • 日志记录配置
1

我同意你的两个条件,这就是为什么我:

  1. 很少包含ac onfig文件作为Windows或Windows Mobile应用程序的一部分(Web应用程序是)。
  2. 如果我确实包含一个配置文件,意图由最终用户调整,它肯定不会是XML。
2

除了明显变化的东西(路径,服务器,端口等)之外,有些人认为你应该能够轻易地改变任何可能的合理改变,例如,假设你有一个通用的引擎,关于业务逻辑(规则引擎)。

然后,您可以在“配置文件”上定义规则,该规则最终不会低于在DSL中编程而是在通用语言中编程。好处在于它更接近域,因此它更容易且更易于维护,并且您可以轻松更改那些会需要新构建的东西。

这背后的主要理由是,你所假定的事情永远不会改变总是最终变化,所以你最好做好准备。

1

员工电子邮件/因为员工的名字可以来来去去...(你通常应该尽量保持他们的应用程序虽然)

+0

通过使用电子邮件别名(在电子邮件服务器上)可以更好地处理此问题。 即[email protected],而不是[email protected] 当有人离开时,只需更改别名以指向他们的替换 - 根本不需要应用程序中的任何电子邮件配置。 – belugabob 2008-12-01 15:50:43

1

配置文件应包括:

  • 部署细节
    • 数据库凭据
    • 文件路径
    • 主机名
  • 任何在很多地方使用,但可能会改变
    • 联系人的电子邮件地址
  • 选项并非在GUI

最后一个是有点开放式,但非常重要。我发现预测客户可能在未来想要改变的变量非常有用。如果更改不频繁,我或他们可以编辑配置文件。如果它变成了一件常见的事情,那么将选项添加到没有硬编码的GUI是很简单的。

3

您的应用程序使用的任何信息是“数据”,并且可能会根据它的安装位置而变化。喜欢的东西:

  • SMTP邮件服务器来发送电子邮件
  • 数据库连接字符串
  • 路径到文件所使用的应用程序
  • FTP服务器&连接信息
  • Active Directory中的位置/文件夹用于身份验证的服务器
  • 应用程序中显示的任何链接至外部信息 消息来源
  • 警告极限值
  • 我甚至已将RegEx过滤器用于限制数据输入字段的允许字符 。
1

我还要补充的加密密钥(这本身应该被加密)...

基本经验法则是信息的应用程序之前需要的常规,功能操作,数据,它必须具有导通手(即本地和不联网)。
请注意,此数据不应该动态更改或大量使用它,否则应该在数据库中。

1

使用Spring应用程序我实际上有两种类型的配置区别:

  1. 项目外化到属性文件分别是“部署时间”的担忧或“环境特异性”:服务器IP的/地址,文件系统位置,等等等等

  2. Spring XML配置,可以通过AOP做很多事情,比如显示整个应用程序的结构,应用行为等

1

我使用Spring来连接没有GUI的J2SE应用程序(事务性切换)中的所有bean。这样一来,对于我来说,在每个部署中都有不同的配置(我们在不同的国家/地区运行此项功能)非常容易,而无需编写任何不同的代码。 我喜欢的另一件事是当我使用plain JDBC(或Spring JDBC)时,将所有SQL语句与代码分开管理。就像属性文件或XML或其他东西一样,有时甚至是将使用该语句的bean中的String属性(当只有一个将使用该语句的bean,例如DAO)时。

1

我打算使用spring JDBC或vanilla JDBC来进行数据持久化,在这里我们决定从Java代码中外部化所有的SQL,所以在SQL查询调优和优化方面可以更好地调整,但我们不需要打扰java代码。

相关问题