我有一项服务,其流程基本上如下:
- 接收输入对象。这只是一个 POJO 对象,我对它的设计没有太多发言权。
- 转换为我的服务的规范化对象。
- 对规范化对象执行一些业务逻辑,并收集一些关于它的额外数据。
- 转换为数据传递到的另一个服务的输出对象。(另一个 POJO。)
- 将转换后的数据传递给另一个服务。
但是,这意味着我的服务的很大一部分是从 type 转换InputFoo
为 typeNormalizedFoo
到 type OutputFoo
。
这将是一项非常容易的任务。我正在使用 Google Collections 库,并且可以有这样的类:
public class InputFooToNormalizedFooConverter implements Function<InputFoo, NormalizedFoo> {
public NormalizedFoo apply(InputFoo input) {
NormalizedFoo output = new NormalizedFoo();
output.setProperty(input.getProperty());
}
}
和这样的另一个类:
public class NormalizedFooFooToOutputFooConverter implements Function<NormalizedFoo, OutputFoo> {
public NormalizedFoo apply(InputFoo input) {
NormalizedFoo output = new NormalizedFoo();
output.setProperty(input.getProperty());
}
}
但是每种类型的 Foo 本质上都有这样的层次结构:
public class Foo {
List<Bar> barItems;
// .. other properties
}
public class Bar {
List<Baz> bazItems;
List<Quux> quuxItems;
// .. other properties
}
public class Baz {
// .. other properties
}
public class Quux {
// .. other properties
}
这意味着我有NormalizedFooToOutputFooConverter
一个NormalizedBarToOutputBarConverter implements Function<NormalizedBar, OutputBar>
类型等等。
更糟糕的是,输入与归一化模型并不完全匹配。这更像
public class InputFoo {
public List<InputBar> bars;
public List<InputBaz> bazs;
public List<InputQuux> quuxs;
// .. other properties
}
public class InputBar {
private String barId;
// .. other properties
}
public class InputBaz {
private String barId;
private String bazId;
// .. other properties
}
public class InputQuux {
private String barId;
private String quuxId;
// .. other properties
}
在这些模型中,我可以根据每个模型的特征Baz
来确定哪些模型Quux
属于哪个模型。Bar
barId
在这一点上,我有大约 20 个不同的转换器用于 from Input
toNormalized
和Normalized
to Output
。更糟糕的是,其中一些具有ReallyLongInputTypeToReallyLongNormalizedTypeConverter
创建极长类名的名称。我觉得我在这里做错了,所有的转换器。有没有更好的方法来组织我的转换器?