组成对继承的使用

问题描述 投票:0回答:1

我和我的一个同事发生了争论。

考虑到 "应该使用组成而不是继承",以下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)
      ...
}
java spring-integration
1个回答
1
投票

确实如此。看起来你不应该为此滥用框架类。它们可能会在未来改变破坏你的代码。

IMHO没有继承,根本就没有组成。

你可以简单地拥有一个这样的bean。

@Bean
JsonToObjectTransformer jsonToSpecificTransformer() {
    return Transformers.fromJson(Specific.class);
}

然后把它当作一个普通的 Transformer 在这一点上的好处是,你根本不需要任何额外的类来支持。

© www.soinside.com 2019 - 2024. All rights reserved.