在决定从DTO中使用这2种结构时,我遇到了问题:
备选案文1是:
@Data
class Lines{
private final Line[] lines;
}
@Data
class Line{
private final String[] specifiers;
private final Set<String> container;
}如下所示:
//Single
Lines lc1 = new Lines(new Line[]{
new Line(new String[]{"m:123"}, new HashSet<>(Arrays.asList("1", "2", "3")))
});
//Composite
Lines lc2 = new Lines(new Line[]{
new Line(new String[]{"m:161", "l:1"}, new HashSet<>(Arrays.asList("1", "2", "3"))),
new Line(new String[]{"m:161", "l:2"}, new HashSet<>(Arrays.asList("1", "2", "3")))
});当序列化产生这些jsons时:
//Single
[
{
"specifiers": ["m:591"],
"container": ["1","2","3"]
}
]
//Composite
[
{
"specifiers": ["m:161", "l:1"],
"container": ["1","2","3"]
},
{
"specifiers": ["m:161", "l:2"],
"container": ["1","2","3"]
}
]或备选案文2,即:
interface ComponentLine{}
@Data
@Accessors(fluent = true)
class Line implements ComponentLine {
private final String specifier;
private final Set<String> container;
}
@Data
@Accessors(fluent = true)
class CompositeLine implements ComponentLine{
private final String specifier;
private final Set<ComponentLine> lines;
}如下所示:
//Single
Line l1 = new Line("m:123", new HashSet<>(Arrays.asList("1", "2", "3")));
//Composite
Set<Line> lines = new HashSet<>();
lines.add(new Line("l:1", new HashSet<>(Arrays.asList("1", "2", "3"))));
lines.add(new Line("l:2", new HashSet<>(Arrays.asList("1", "2", "3"))));
CompositeLine cl1 = new CompositeLine("m:161", lines);当序列化产生这些jsons时:
//Single
{
"specifier": "m:591",
"container": ["1","2","3"]
}
//Composite
{
"specifier": "m:161",
"lines": [
{
"specifier": "l:1",
"container": ["1","2","3"]
},
{
"specifier": "l:2",
"container": ["1","2","3"]
}
]
}到目前为止,在研究这两种选择时,我可以看到这两种方法的一些好处:
有谁对这种DTO-s有更多的经验,从这两件事中我能找到更多的好处吗?
发布于 2019-03-28 12:26:04
有几个因素涵盖了决定哪些DTO对象最适合您的目的:
底线是,您必须实际看到包含实际数据的格式。这将帮助你对它的工作有多好的感觉。该过程还将帮助您了解生成数据是多么容易。之后,您可以看到您的平均消息大小。
考虑到我不知道您的数据传输需求的具体情况,我所能做的就是给您提供一般的指导,以帮助您选择。
https://softwareengineering.stackexchange.com/questions/389359
复制相似问题