代码之家  ›  专栏  ›  技术社区  ›  dsimcha

带命令行参数的自配置类:模式还是反模式?

  •  1
  • dsimcha  · 技术社区  · 15 年前

    我有一个程序,很多类都有非常复杂的配置需求。我采用了分散配置的模式,允许每个类获取和解析其c'tor中的命令行/配置文件参数,并对它们执行所需的任何操作。(这些是非常粗粒度的类,只实例化了几次,因此这里绝对没有性能问题。)这样就避免了必须做散弹枪手术,才能在需要通过的所有级别中插入我添加的新选项。它还避免了在多个地方指定每个配置选项(解析和使用)。

    这种编程方式有哪些优点/缺点?它似乎减少了关注点的分离,因为每个类现在都在做配置工作,并且减少了程序的自文档化,因为类采用的参数变得不那么明确。另外,它似乎增加了封装,因为它使每个类更加独立,因为程序的其他部分不需要知道类可能需要什么配置参数。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Thomas Pornin    15 年前

    不管你是怎么做的,你都有几个“模块”竞争相同的命令行参数序列。必须进行一些协作,以便类可以处理相同的命令行参数,而不会发生冲突。

    通过让每个类实现解析,您只需使合作隐式化。没有一个模块专门用于您的类之间的合作。这个问题变成了文档问题,而不是代码问题。它不是 坏的 但它可能诱人地显示,似乎问题只是“消失”。简而言之,这种做法需要更多的纪律。

    而且,这将使命令行参数语法的主要检查更加困难。

        2
  •  1
  •   Jeff Sternal    15 年前

    似乎在增加 它使每个 类更加独立,因为没有 程序的其他部分需要 确切知道什么配置 类可能需要的参数。

    如果我理解你的建议,它真的会让每个类隐藏它们的依赖关系。

    本例中的依赖项可能很简单(原始),但如果类需要用户名和密码才能正常工作,则应该在其构造函数中这样说。否则,类的调用方需要查看源代码或文档才能使用它。