【发布时间】:2021-09-17 05:39:32
【问题描述】:
我有一个设计/架构问题。我目前正在尝试优雅地将数据解析为单个数据类。但是数据是由各种协议包装的:A(B(C))。主要思想是能够在不同的层切换这些(如A(D(E)) 或B(C))。但最后我只想返回一个包含所有内容的对象。
我目前的方法是使用继承来抽象每个类的层/协议。但是使用这种方法,我在切换层时不灵活,而不必重新编码类。请参阅下面的简化示例和示例数据。
所以我的问题是:是否有一种模式可以正确实现分层数据的这种反序列化,同时保持更改层的灵活性?
{ // Layer A
"timestamp": "2021-07-06T10:01:00.000Z",
"value": { // Layer B
"timestamp": "2021-07-06T10:00:30.000Z",
"src": "any",
"data": "some complex data string" // Layer C
}
}
class _Base { public JsonNode parse(JsonNode data) { return data; } }
class A extends _Base {
public Instant aTimestamp;
public JsonNode parse(JsonNode data) {
JsonNode remaining = super.parse(data);
aTimestamp = Instant.parse(remaining.get("timestamp").asText());
return remaining.get("value");
}
}
class B extends A {
public Instant bTimestamp;
public String src;
public JsonNode parse(JsonNode data) {
JsonNode remaining = super.parse(data);
bTimestamp = Instant.parse(remaining.get("timestamp").asText());
src = remaining.get("src").asText();
return remaining.get("data");
}
}
class C extends B {
public String[] data;
public JsonNode parse(JsonNode data) {
JsonNode remaining = super.parse(data);
this.data = remaining.asText().split(" ").
return null;
}
}
【问题讨论】:
标签: java design-patterns architecture deserialization