我已经仔细考虑的配置文件和它们关系到代码现在一段时间,根据日期和方向的风我的意见似乎改变。更多和更虽然我继续回来实现我第一次不得不学习的同时口齿不清:之间有很小的差异的数据和编码。这似乎加倍真实的配置文件。当看待的权利轻Perl脚本是略多于一个配置文件perl。这种倾向具有相当重后果的任务,如质量保证和部门的劳动力像谁应该负责的改变配置文件。

蠕从配置文件完全成熟的语言通常是缓慢的,似乎是驱动通过的愿望有一个通用的系统。大多数项目似乎开始出少有的几个配置项目一样,写入记录,在那里寻找数据,用户名称和密码等。但是然后他们开始增长:特启动能够开启或关闭,时间和顺序的操作开始进行控制,并且,不可避免的是,有人想要开始加入逻辑(例如使用10如果机器X和15如果机器Y)。在某一点的配置文件将成为一个领域特定的语言,和一个写得很差的一个。

现在,我们天马行空设置阶段,在这里是我的问题:

  1. 什么是真正的目的配置 文件?
  2. 应该尝试可作出保留 配置文件简单吗?
  3. 谁应该负责 修改(开发人员、用户 管理员等等)?
  4. 他们应该被源的控制 (参见问题3)?

正如我早些时候所说我的这些问题的答案移不断,但是现在我想到:

  1. 允许一个非程序员,以改变 大块的行为迅速
  2. 是的,什么,是不是粗糙 细的应该是在码
  3. 用户应当负责 配置文件和程序应该 负责结构 层之间的配置文件和代码 这提供了更多的细的控制 该应用程序
  4. 没有,但是更精确的中间层应
有帮助吗?

解决方案

非常有趣的问题!

我倾向于限制我的配置文件的一个非常简单的"key=value"的格式,因为我完全同意你的看法,配置文件可以非常迅速地变得完全成熟的方案。例如,任何人曾经试图"配置"OpenSER知道这种感觉你是在说:这是不结构,它是(痛苦)编程。

当你需要你的应用程序非常"配置"的方式,你无法想象今天那你真正需要的是一个 插件系统.你需要开发应用程序的方式,其他人可以代码一个新的插件和吊钩到你的应用程序的未来。

所以回答你的问题:

  1. 什么是真正的目的配置文件?

    我要说的是,允许人将安装应用程序,以便能够细一些的部署有关的参数,如主机名称、编号的线名的插件你需要的和部署的参数,对于那些插件(检查出它的配置为一个例子这一原则)等。肯定不是地方表达商业逻辑。

  2. 应该尝试可作出保留的配置文件简单吗?

    肯定。如你所建议的,"程序"在配置文件是可怕的。我相信它应当是可以避免的。

  3. 谁应该负责进行更改给他们(开发商、用户、管理员等等)?

    在一般情况下,我想说,管理员、部署的应用程序。

  4. 他们应该被源的控制(参见问题3)?

    我通常不要来源--控制结构文件本身,但是我 来源控制的一个模板构成文件,与所有参数和默认值和意见,描述了他们做什么。例如,如果一个配置文件被命名为 database.conf, 我通常源-控制一个文件命名为 database.conf.template.现在我当然在谈论我做什么 作为一个开发商. 作为一个管理员, 我可能要来源控制的实际设置的,我选择了每个安装。例如,我们管理几百远程服务器,我们需要跟踪他们的配置:我们选择这样做源的控制。


编辑:虽然我认为上述是真实对于大多数应用中,总有例外的,当然。你的应用可允许其用户配置的动态复杂的规则,例如。大多数客户的电子邮件允许用户限定规则管理他们的电子邮件(例如,"所有电子邮件来自'john doe'并不具有我在:现场应该被废弃").另一个例子是,一个应用程序,允许用户定义的一种新的复杂的商业提供的。你也可以认为有关应用程序,如Cognos允许他们的用户建立复杂的数据库报告。电子邮件客户将可能用户提供一个简单的接口定义的规则,而这会产生一个复杂的配置文件(或甚至也许有一位的代码)。另一方面,用户定义的结构,为商业提供可能被保存在一个数据库,在一个结构化的方法(既不是一个简单的key=value结构,也不是一个部的代码)。和其他一些应用程序甚至可能允许用户代码在蟒蛇或VB,或一些其他自动化能力的语言。换句话说...你的里程可能会有所不同。

其他提示

"确定"。您将有某些用户而想要一个真正简单的config,你应该给他们。在同一时间,你会有不断的请求的"你可以添加这个吗?我怎么做在配置文件?", 我不明白为什么你不能支持这两个群体。

该项目目前我正在工作上使用Lua为其配置文件。卢脚本语言,它工作得很好,在这种情况。有可用的一个例子我们的 默认结构.

你会注意到,这主要是key=value发言,其中值可能是任何Lua的内置的类型。最复杂的事情有清单,他们是不是真的复杂(它只是问题的syntax).

现在我只是在等待有人问到如何设置他们的服务器的端口的一个随机的价值,每次他们开始了...

最近,我的工作在一个项目,我意识到我想有条件在我的配置文件而以前只是一个非常简单的一种形式:


key = val
key2 = val
name = `hostname`

我不想写一个小型的语言,因为除非我非常仔细地我不能允许的灵活性,将是有益的。

而不是我决定我会有两种形式:

  1. 如果该文件开始与"#!"和可执行我分析的结果。

  2. 否则我会读它

这意味着,我现在可以让人们写信"的配置文件",是这样的:

 #!/usr/bin/perl
if ( -x /bin/foo ) 
{
   print <<EOF;
foo=me
bar=you
EOF
}
else
{
   print <<EOF;
foo=bar
bar=foo
EOF
}

这样我获得权力的一个动态的配置文件,如果用户要使用它,而简单的没有写我自己的小语言。

每一个(足够长的生活)的配置文件架构最终成为一种编程语言。由于所有影响你的描述,这是明智的配置文件设计者的意识到她是创作一种编程语言,并制定相应的计划,以免她的负担将来的用户有不良的遗产。

我有一个不同的哲学有关的配置文件。有关数据应用程序如何需要运行 仍然是数据, ,因此属于一个数据存储,而不是在代码(a config文件,海事组织是代码)。如果最终用户的需要,以便能够改变的数据,然后应用程序应该提供一个接口,这样做。

我只使用配置文件的指在数据存储。

你可以把理论计算的定义是什么算作一种编程语言。如果你的配置文件的格式是 图灵完成 然后,它的合理的计算作为一种编程语言。通过这一定义,文件的格式来描述水平的 箱子 计为一种编程语言(见 在这里,).还有其他的复杂程度下面图灵完成,还可以计数,例如 正规语法下推自动机.

另一种方式来看待它是许多配置文件只能够数据标记,而一个适当的编程语言必须是能够实现 算法.例如,JSON是一个配置文件的格式,而通信机制详解脚本是用一种编程语言。

这是我的想法:

  1. 允许运行时行为中的一个应用程序修改,很容易。这可以通过程序或非程序员,根据不同的需要。这可以在发展,但我经常查看的配置文件作为一种有助于使程序更灵活的任何一点。

  2. 是的。我认为,配置文件应该尽可能简单、定约束,你可能需要的各种选项,以控制的不同行为的你的运行时间。我更愿意分组的结构设置,并简化他们尽可能的。

  3. 取决于什么以及为什么改变正在取得进展。如果用户要改变它,一个前端应对隐藏他们的详细信息。同往往是真正的非开发人员在一般。

  4. 我经常来源的控制"默认"的配置,但有一个方式重写这个系统的实际运行时间。

作为加入逻辑的配置文件的-我会避免这种情况。我认为这是更好只是有的配置文件的关于逻辑,在你的应用程序。行为的配置文件会导致缺乏可维护性和理解,在我的经验。我强烈喜欢让配置文件尽可能简单。

我倾向于同意的前提下,这个问题。我避免让自己陷入麻烦的早期预测,这是将要发生的,因此 从来没有 滚我自己的配置系统。

  • 要么我使用操作系统的配置facuility(例如plist,或gconf或什么是适当的),
  • 或者一个简单的平面文件,如可以处理的东西就像一个现成的INI分析器。
  • 咬紧牙和塞轻语言分析程序,通常lua,有时tcl进入应用程序,
  • 或数据存储在一个源码或类似关系数据库。

和辞职自己的生活的任何决定作出,或如果我不能,重构使用一个以上的选择更适合的应用程序。

点是,没有任何理由使用自家种植的配置的解决方案。对于一件事情,很难对用户需要学习一种新的、应用程序的具体配置的格式。另一时,你从中受益的所有许多错误修复和更新来自当使用一种现成的解决方案。最后,特蠕动是把其余的,因为,嗯,你其实不能仅仅增加一个功能没有真正做着一个重大的修改,导致配置系统是不是真的在你的手放在第一位。

这取决于你同意与其他开发人员的队伍。你使用配置文件仅仅作为配置文件或者你正在创建一个 模型驱动的 应用程序。

症状的配置文件成为一种编程语言:

  • name=value pairs开始依赖于彼此
  • 你觉得需要有流动的控制(ex。 如果(这个),比,)
  • 文件的配置文件将成为重要,可以做进一步的发展(而不是仅仅使用的应用程序)
  • 之前的价值从config读它需要有一些方面(即值取决于什么外部的配置文件本身)

配置文件总是英寸他们变成丑陋的、不合逻辑的"完全成熟的编程语言"。它需要技术和技能,以设计良好的编程语言,并配置语言变编程语言往往是可怕的。

一个好的方法是使用一个很好的设计的语言,说蟒蛇或红宝石,并用它来创建一个 DSL 对于您的配置。这样你的配置语言能保持简单表面上的,但在实际上是完全成熟的程序语言。

我相信你的问题是非常相关赋予移到"流利的接口"。许多开发商已经"见过"关于XML配置的应用。使用XML可以非常冗长和艰难的编辑正确(特别是如果没有架构是提供)。具有流利的界面,允许开发人员配置的申请在一特定领域的语言协助一些关键值对从一个纯文本文件的配置(或许是命令行参数)。这也使得它很容易安装和配置新的实例应用于测试或什么的。

这里是我的回答你的问题:

  • 什么是真正的目的配置 文件?

配置文件是一个办法允许用户定制的行为他们的程序在运行时间。

  • 应该尝试可作出保留 配置文件简单吗?

理想情况下,我将认为,配置文件应该至少加以补充,通过一个流利口配置程序(这是有用的,在许多方面).如果你需要配置文件然后应当保持非常简单,没有什么比其他关键值对。

  • 谁应该负责 修改(开发人员、用户 管理员等等)?

我认为回答这取决于您的组织。它应当负责的人员部署的软件,以确保它正确配置。

  • 他们应该被源的控制(见 问题3)?

我会偷这个回答来自其他人:)我喜欢这个主意的储存配置模板源的控制和修改它对每一个本地用户的需要。机会是一个开发人员的配置文件是另一个开发商的噩梦,所以它是最好离开的事情而有所不同用户推源的控制。有一个模板也是一个很好的方式让人的部署应用程序(或其他开发商)看看到底什么样的价值观都是有效的配置文件。

我已经看到蟒蛇的节目配置文件 代码。如果你不需要做什么特别的(条件,等等。) 它看起来并不太大的不同,从其他config风格。例如我可以做一个文件 config.py 与这样的东西:

num_threads = 13
hostname = 'myhost'

而唯一的用户负担,相比(说)INI文件,是他们需要把"围绕串。毫无疑问,你可能做同样的事情在其他解释的语言。它给你无限的能力复杂化你的配置文件,如果有必要,在危险可能吓到你的用户。

是的,配置文件应是简单的。他们不应包含任何'逻辑的'自己想想他们作为一个列表中的表达方式,如果报表,没有条件的声明在他们的全部内容。

他们有允许用户决定哪个选项的编码应用程序内的应用,因此不要试图让他们复杂的,它将最终自我毁灭的-你可以写出简单的配置文件,以控制的原配置文件应构成其他!

一的目的"奥斯陆"的工作在微软允许(但不要求)解决这一问题。

  1. 应用程序将船的模型的任何新的组成,它包括。它还将使用现有模型。例如,它可能包括一个网络服务,所以它可以重复使用的系统模型的网服务。
  2. 该模型将包括元数据描述,包括足够的信息工具,访问他们,无论是文本或图形。
  3. 零部件的模型,将相应于"配置"

这意味着,相当于今天的配置文件可以丰富,足以支持这两个文字及图片编辑的配置。图形的工具将提供与"奥斯陆"(代号为"象限").

我会的逆势而提交的唯一一种语言时,它代表了超过可以由XML;或其他当XML被认为是一种语言。

或者,大多数配置文件可以被认为是课程,但只有属性的并且没有方法。并没有的方法,我不认为这是一个语言。

最终,"语言"是一种粘糊糊的抽象,但是,边是模糊的。

代码的应用程序变得不重要...有脚本,也有各种属性的定义的行为的类别、方法、方法参数和属性。用户可以定义数据库的触发器和数据库的约束。有可能是非常复杂的配置文件。有时用户可以定义XSLT stylsheets操纵的输入和输出,因为我们的系统需要开放(SOA)。有这样的东西BizzTalk,需要复杂的结构。用户可以定义复杂的工作流程。

我们必须编写更好的代码来处理这种复杂的环境中,这样的代码,我们应用程序变得更加重要的...

我是个大风扇使用python程序的配置文件,尤其是为监控程序。我喜欢把粘性的守护程序完全是空的配置除外"的配置港"。蟒蛇的程序随后连接到程序和进行创建目的在程序和导线他们一起为创建所需的结构。一旦一切都设置了,守护程序后可以留下来运行它自己。的利益,当然,是的,你得到一个完全成熟的编程语言写入你的配置文件和既然你已经有一个方式来说话程序,从另一个程序,可以使用它的调试和获得统计数据。主要缺点是具有处理消息从另一个程序即将在任何时间。

配置文件:"什么是我的目的吗?"
你的:"配置黄油。"
配置文件:"好吧..."
配置文件:"什么是我的目的吗?"
你的:"你配置黄油。"
配置文件:"哦我的上帝。"

  1. 有没有"真正的目的"的配置文件。它的任何有意义的。在一般情况下,事情有所不同(或可能有所不同)之间的机器和不改变在你的应用程序的运行应该有可能在配置文件。默认值、港口和地址,用于其他服务是所有伟大的候选人。密钥和密也是伟大的候选人,但应分开处理正常的配置,用于安全原因。我不同意的目的配置文件允许快速变化作出。目的应该允许灵活性,在设置你的应用程序。如果一个配置文件是一个快速简单的方式允许的灵活性,那就更好了-但你应该 可以你打算配置文件可以经常改变。

  2. 是的,没有。你应该atempt使应用程序的代码简单吗?是的。你应该试图使你写的一切简单的一点。没有比它更复杂,需要。同样是真实的你的配置。然而,这是非常应用程序特有的。硬编码,什么应该是在配置,因为这会使你的配置"太复杂"是糟糕的设计。事实上,在努力"让事情变简单的"是为什么配置文件的结束是一个巨大的混乱。有时候最简单的移动是以模块化.这就是为什么你的配置文件应该被写在一个众所周知的通用编程语言-不是有些可怕的结构语(阅读: 所有"配置语言"吸).

  3. 再次,应修改配置文件完全应用程序的依赖。但我同意miniquark,谁是部署应用程序应当负责的配置。

  4. 源控制一切可以。源控制是巨大的。你可以滚东西回来超容易,你有一个完整的历史记录的更改,已经作出和记录的是谁做的这些变化。所以为什么不呢?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top