代码之家  ›  专栏  ›  技术社区  ›  C. Ross trotttrotttrott

如何处理一个具有数百个字段的Java类?[关闭]

  •  9
  • C. Ross trotttrotttrott  · 技术社区  · 14 年前

    我正在尝试设计一个使用第三方API的程序。第三方API描述了一个包含296个字段的输入和一个包含179个字段的输出。显然,我希望类表示输入和输出。设计一个包含这么多字段的类有什么诀窍吗?我应该为每一个领域都有一个正常的打手和二传手吗?

    注: 因为您会问,API接受一个字符串,其中所有字段都是固定宽度格式的输入,并返回一个字符串,其输出也是固定宽度格式的。从中很难解释非平面结构。

    7 回复  |  直到 13 年前
        1
  •  5
  •   Jacob Mattison    14 年前

    伊克斯。

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

    另一个选项:使用一系列嵌套类来添加组织(例如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");
    ...
    
        2
  •  3
  •   David J. Liszewski    13 年前

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

        3
  •  2
  •   Nicolas78    14 年前

    如果最终性能不是致命标准,我会认真考虑使用两个哈希表。

        4
  •  2
  •   Pierre    14 年前

    你能用A吗? Java.UTI.MAP 而不是有setter/getter的类?

        5
  •  2
  •   aepryus    14 年前

    代码生成怎么样?用输入参数创建一个文件,用输出参数创建另一个文件。然后创建您想要的任何代码模板:getter、setter和常量。然后把这两个相乘。

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

        6
  •  1
  •   Mike Caron    14 年前

    哇,那是很多领域。不管…

    API如何与此类交互?如果它提供了所需的类结构的实现,那么您一定要使用它。

        7
  •  0
  •   matt b    14 年前

    第三方API必须声明一些用于处理输出数据的类型/类,对吗?假设这个API是Java类,那么显然它们需要返回一个 Output 对象。

    如果是这样的话,为了与这个API交互,我将创建一个包装对象,

    1. 包装输入字段/对象和输出对象
    2. 只有 具有字段的公共访问器方法 我的 程序关心与交互(我觉得您不需要访问所有296个字段)

    这样,程序的其余部分只需要知道它需要知道的字段的存在,其余字段(以及第三方对象本身)完全隐藏/抽象。