我正在设计一个使用第三方API的程序。该API描述了一个具有296个字段的输入和179个字段的输出。显然,我想要用类来表示输入和输出。对于设计具有如此多字段的类,是否有任何技巧?我应该为每个字段都有一个正常的getter和setter吗?
注意:由于您的要求,API以固定宽度格式的字符串作为输入,并返回以相同格式的字符串作为输出。因此很难从中解释出非扁平结构。
注意:由于您的要求,API以固定宽度格式的字符串作为输入,并返回以相同格式的字符串作为输出。因此很难从中解释出非扁平结构。
天啊。
一种选择是简单地使用Map或类似的属性持有者。
另一种选择:使用一系列嵌套的类来添加组织(例如Order.Person.ContactInfo.Address.ZipCode,而不仅仅是Order.ZipCode)。我不确定我是否喜欢这个选项,因为它意味着额外的复杂性,但如果没有它,找到你想要的特定getter/setter(比如通过IDE中的自动完成)会变成噩梦。
还有一种选择:如果您创建了一个具有许多属性的单个类,请考虑使用“表达式构建器”模式,在该模式中,每个“setter”返回对象本身,使您能够链接设置器:
myObject.setPropertyA("Foo").setPropertyB("Bar").setPropertyC("Baz")...
这可以创建比之前更快和更流畅的界面。
myObject.setPropertyA("Foo");
myObject.setPropertyB("Bar");
myObject.setPropertyC("Baz");
...
如果终极性能不是最重要的标准,我会认真考虑使用两个哈希表。
EnumMap
应该非常快(枚举序数的非线性读取可能是最糟糕的部分,但我猜这比为不同字段编写不同的代码要好)。 - Tom Hawtin - tackline哇,这是很多字段啊。不过无论如何...
API如何与这个类交互?如果它提供了所需的类结构实现,那么你应该毫不犹豫地选择它。
第三方API必须声明一些类型/类来处理输出数据,对吧?假设这个API是一个Java类,那么显然他们需要从他们的方法中返回一个单独的Output
对象。
如果是这种情况,为了与这个API交互,我会创建一个包装器对象,其中:
这样,您的程序的其余部分只需要知道它需要了解的字段的存在,而其余字段(以及第三方对象本身)完全被隐藏/抽象化。