我和我的一个同事发生了争论。
考虑到 "应该使用组成而不是继承",以下2个代码片段,你觉得哪个更好?
1)
class JsonToSpecificTransformer implements Transformer {
private final JsonToObjectTransformer jsonTransformer = Transformers.fromJson(Specific.class);
@Override
public Message<?> transform(Message<?> message) {
return jsonTransformer.transform(message);
}
}
2)
class JsonToSpecificTransformer2 extends JsonToObjectTransformer {
public JsonToSpecificTransformer2() {
super(Specific.class);
}
}
具体的类会显示这样的内容。
@Data
class Specific {
private int field1;
...
}
我将对这两个代码片段做一点评论:
1)使用组成和保持和内部对象,这样它就不会每次都被重新初始化。
2)使用了继承。
谢谢!
编辑 。
我使用的是一个DSL IntegrationFlow之类的。
@Autowired
private JsonToSpecificTransformer jsonToSpecificTransformer;
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from("myChannel")
.transform(Transformers.fromJson(service2.Specific.class)
or
.transform(jsonToSpecificTransformer)
...
}
希望前面这段代码能说明一点我的意图。
并试图总结一下。
@Bean
public JsonToObjectTransformer jsonToSpecificTransformer() {
return Transformers.fromJson(Specific.class);
}
---
@Autowired
//@Qualif...
private JsonToObjectTransformer jsonToSpecificTransformer;
@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from("myChannel")
.transform(jsonToSpecificTransformer)
...
}
确实如此。看起来你不应该为此滥用框架类。它们可能会在未来改变破坏你的代码。
IMHO没有继承,根本就没有组成。
你可以简单地拥有一个这样的bean。
@Bean
JsonToObjectTransformer jsonToSpecificTransformer() {
return Transformers.fromJson(Specific.class);
}
然后把它当作一个普通的 Transformer
在这一点上的好处是,你根本不需要任何额外的类来支持。