参数设置的设计模式,可在适当大小的java项目中维护

use*_*778 4 java maintainability

我正在寻找有关如何为我的java程序管理许多不同参数设置的具体想法.我知道这个问题有点分散,但我需要一些关于大局的想法,以便我的代码变得更易于维护.

我的项目所做的是对数据执行许多处理步骤,主要是文本.这些处理步骤是通常具有许多设置的不同复杂度的算法.我还想更改配置文件使用的处理步骤.

我的程序的原因是进行可重复的实验,因此我需要能够获得代码不同部分中使用的所有参数的完整视图,最好是格式良好.

在这个(原型)阶段,我有源代码中的设置,如:

public static final param1=0.35;
Run Code Online (Sandbox Code Playgroud)

并且负责某个处理步骤的每个类都有自己的硬编码设置.它实际上非常可怕,因为没有简单的方法来改变事物,甚至没有看到做了什么以及使用什么参数/设置.

我的想法是为所有设置提供中央键/值存储,这些设置也支持转储所有设置.例:

k:"classA_parameter1",v:"0.35"
k:"classC_parameter5",v:"false"
Run Code Online (Sandbox Code Playgroud)

但是,我真的不想将参数存储为字符串,而是将它们与实际的java类或对象相关联.

拥有一个管理一切的单一"SettingsManager"是否更聪明.或者在main可以访问的每个类中有一个SettingsManager对象?我真的不喜欢存储设置的字符串描述,但我看不到任何其他方式(假设一个设置是使用的SAXparser实现,另一个参数是双倍,例如百分比),因为我真的不想存储它们作为对象并投射它们.

非常感谢有关相关设计模式的页面的经验和链接.

为了澄清,我的实验可以看作是一系列处理来自文件/数据库的数据的算法.这些算法根据其在整个过程中的任务分组为不同的类,例如

Experiment //main
   InternetLookup //class that controls e.g. web scraping
      ThreadedWebScraper 
      LanguageDetection //from "text analysis" package
   Statistics    //Calculate and store statistics
      DatabaseAccess
   DecisionMaking //using the data that we have processed earlier, make decisions (machine learning)
      BuildModel
      Evaluate
Run Code Online (Sandbox Code Playgroud)

每个最低级别的类都有参数并且不同但我仍然想要查看正在发生的所有事情.

Pin*_*ino 8

您有以下选项,从最简单的选项开始:

  1. 一个属性文件
  2. Apache Commons配置
  3. Spring框架

后者允许从XML配置文件创建任何Java对象,但请注意它是一个框架,而不是一个库:这意味着它影响整个应用程序的设计(它促进了反转控制模式).