2

所以我在 Java 中为Accumulo构建各种索引和摄取类

但我的问题没有直接关系。

我有一个属性文件,存储一个长列表(假设有两打并且还在增长)关键字和数据库表名。

现在,当我的主类被实例化时,我将所有这些属性读入它们相关的 String 对象并在整个过程中使用它们。然而,其中一些项目需要传递给其他类,有时是大块传递。

我想我的选择是

  1. 像现在这样继续前进,这似乎很糟糕,因为如果我以错误的顺序提交令牌,可能会发生各种讨厌的事情。
  2. 传递属性对象本身,让每个类处理实例化自己的字符串对象(如果在文件中添加或删除标记,将来维护起来很容易)。
  3. 将信息存储在一个 JSON 文件中,该文件作为一个特殊的类对象被读入,该对象被传递给需要从中提取一些信息的任何人(小缺点是每个类都根据需要从表名创建表引用,在使用 JSON 的情况下,继续实例化所有表引用可能是有意义的,这样类就可以请求引用,但是在不需要时会经常创建一些额外的引用。)
  4. 其他一些选择 Java 专家知道我不知道

我对此感到担忧,因为过去我主要是嵌入式和小型系统的 C++ 开发人员。这是我的第一个大型项目之一,所以我试图从一开始就做事。我已经有一堆书,包括设计模式,只是为了让我的脚湿透,但是任何一般的编程实践知识库我都会很乐意接受建议。

我试图将其概括化,以便其他人受益,但可能需要更多细节,请告诉我。

4

3 回答 3

0

Commons Configuration有几个功能可以帮助您组织

  • 独立于源的配置数据(属性文件、XML 文件、数据库……)
  • 分层属性
  • 声明和创建 bean
于 2013-03-05T16:24:46.883 回答
0

选项(2)似乎是一个好方法。

一种变体是将所有字符串从主 Properties 对象提取到单独的 Properties(或 HashMap)对象中,可能基于元素名称的前缀。因此,类Foo获取所有名称前缀为 的属性foo.,类Bar获取所有bar.xxx属性,依此类推。

这将属性保存在逻辑上(和物理上)单独的集合中,并为给定的类提供它需要的那些属性。如果所有类都需要共享公共属性(可能带有all.orglobal.前缀,或者根本没有前缀),则可以将这些属性添加到每个单独的 Properties 对象中。

于 2012-10-17T23:45:14.073 回答
0

您的复杂程度要求您直接处理 java.util.Properties 文件。

它是一个简单的对象,它应该根据您的需要进行缩放。我不建议将您的属性映射到 Java 对象,因为您最终会不断更改映射文件;您需要只有 java.util.Map 才能提供的全部灵活性。

顺便说一句,您需要这个的事实听起来不正确。可能存在需要在您的应用程序中重新考虑的全局设计问题。

此外,json 解决方案可能很好,因为在分层树中构建属性可能有助于降低配置文件的复杂性,但我会再次避免将 json 对象映射到 Java 对象,因为您的模型经常更改(据我所理解)。

您可能会尝试在配置属性之间找到“模式”并尝试提取一些组织。一旦您猜到了配置中构建的一些好的“业务对象”,您就可以将配置简化为这些对象的数组。

JSON 听起来很适合我。你的问题可以看作是“复杂配置”的原型,这种情况并不少见(想想maven中的pom.xml)。所以我认为你需要两件事:

  1. 在您的配置中提取一些组织
  2. 使用一些结构化的配置格式(如 JSON 或 XML)
于 2013-01-27T15:41:18.710 回答