【发布时间】:2015-06-29 03:31:21
【问题描述】:
我和一位同事正在讨论管理配置文件的最佳实践,我们希望从其他人那里获得更多反馈。
我们的目标是让配置文件指定在某些事件发生时应采取的行动。
我们正在讨论的 2 个选项:
-
在配置文件中,指定类的类路径,实现要采取的动作(例如:“ActionToTake”:“com.company.publish.SendEveryoneAnEmailClass”)时间>。 在代码内部,当遇到此事件时,我们可以执行 Class.forName(config.ActionToTake).newInstance().run() 以调用指定的操作。
在配置文件中,以人类可读的短语指定应采取的操作(例如:“ActionToTake”:“SendEveryoneAnEmail”)。在代码内部,当遇到此事件时,我们可以解析 config.ActionToTake,并执行一个映射,将其转换为操作实现(例如:new SendEveryoneAnEmailClass().run())
我们目前是一个非常小的团队,目前唯一阅读/使用此配置文件的人是我们的软件开发团队。但目前还不清楚这是否会在未来继续存在。
选项 1 背后的原因:任何阅读配置文件的人都将明确且立即知道将调用哪个类以及在何处实现。这也允许从一个完全独立的 JAR 文件中实现/导入动作类,而无需重新编译/更改我们的代码。
选项 2 背后的原因:配置文件应该是对用户意图的高级描述,并且不应包含诸如特定类名和包路径之类的实现细节。类/包名称的重构也可以在无需更改配置文件的情况下完成。
对于这两种设计理念中的哪一种更适合配置文件的想法?
【问题讨论】:
-
对我来说,选项 (1) 的另一个最重要的优点是,稍后您可以将 ActionToTake 配置为您尚未编写的类,(或者其他人可以使用他们的自己的类),所有这些都没有对调用在操作上运行的代码进行任何更改。这很像 Spring 配置文件为 IOC 工作的方式,而像 Eclipse 这样的 IDE 在重构类和包名称时会选择性地包含 XML 配置文件。
标签: java configuration config configuration-files