如何处理包含数百个字段的java类?

时间:2010-07-27 18:17:31

标签: java oop

我正在尝试设计一个使用第三方API的程序。第三方API描述了具有296个字段的输入,以及具有179个字段的输出。显然我希望类代表输入和输出。设计一个有这么多领域的课程有什么技巧吗?我应该为每个领域都有一个正常的吸气器和设定器吗?

注意:因为你问,API采用一个字符串,其中包含固定宽度格式的所有字段作为输入,并返回一个字符串,其输出也是固定宽度格式。从中可以很难解释非平面结构。

7 个答案:

答案 0 :(得分:5)

让人惊讶。

一种选择是简单地使用Map或类似的财产持有人。

另一种选择:使用一系列嵌套类来添加组织(例如Order.Person.ContactInfo.Address.ZipCode,而不仅仅是Order.ZipCode)。我不确定我喜欢这个,因为它意味着额外的复杂性,但没有它,找到你想要的特定的getter / setter(比如通过IDE中的自动完成)会成为一场噩梦。

另一个选择:如果你创建了一个包含许多属性的单个类,请考虑使用“表达式构建器”模式,其中每个“setter”返回对象本身,使您能够将setter链接在一起:

myObject.setPropertyA("Foo").setPropertyB("Bar").setPropertyC("Baz")...

可以创建更快捷,更流畅的界面

myObject.setPropertyA("Foo");
myObject.setPropertyB("Bar");
myObject.setPropertyC("Baz");
...

答案 1 :(得分:3)

也许包装具有大量参数的API方法并重复应用Introduce Parameter Object重构,将逻辑相关参数分组到参数对象中,特别是如果结果映射到可以应用adaptor pattern的现有模型对象中。

答案 2 :(得分:2)

如果最终表现不是杀手级标准,我会认真考虑使用两个哈希表。

答案 3 :(得分:2)

您可以使用 java.util.Map 而不是使用setter / getters的类吗?

答案 4 :(得分:2)

代码生成怎么样?使用输入参数创建文件,使用输出参数创建另一个文件。然后创建你想要的任何代码模板:getters,setter,constants。然后将两者相乘。

如果您需要重新构建它,只需修改模板并重新生成。

答案 5 :(得分:1)

哇,那是很多领域。无论...

API如何与此类交互?如果它提供了所需类结构的实现,那么你肯定应该这样做。

答案 6 :(得分:0)

第三方API必须声明某些类型/类来处理输出数据,对吧?假设这个API是一个Java类,那么显然他们需要从他们的方法中返回一个Output对象。

如果是这种情况,要与此API进行交互,我将创建一个包装器对象

  1. 包装输入字段/对象和输出对象
  2. 只有我的计划的字段提供了公共访问方法,这些方法关心与之交互(我觉得您不需要访问所有296个字段)
  3. 这样,你的程序的其余部分只需要知道它需要知道的字段的存在,其余的字段(以及第三方对象本身)是完全隐藏/抽象的。 / p>