我正在尝试设计一个使用第三方API的程序。第三方API描述了具有296个字段的输入,以及具有179个字段的输出。显然我希望类代表输入和输出。设计一个有这么多领域的课程有什么技巧吗?我应该为每个领域都有一个正常的吸气器和设定器吗?
注意:因为你问,API采用一个字符串,其中包含固定宽度格式的所有字段作为输入,并返回一个字符串,其输出也是固定宽度格式。从中可以很难解释非平面结构。
答案 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进行交互,我将创建一个包装器对象
这样,你的程序的其余部分只需要知道它需要知道的字段的存在,其余的字段(以及第三方对象本身)是完全隐藏/抽象的。 / p>