对象序列化逻辑(字段到 XML 或 JSON 名称和值的映射)应该放在哪里?在每个实体对象内部或进入一组仅与序列化有关的不同类?与此问题相关的任何其他最佳实践?
例如:
class Person {
String name;
}
Run Code Online (Sandbox Code Playgroud)
有些人是这样处理的:
class Person {
String name;
public String toJson () {
// build JSON, use 'name' field
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我们还需要 toXML()、toCSV()、toXYZ() 保持该方向将创建严重污染的代码并破坏单一职责原则,即使使用单个 toJson 方法,恕我直言,该原则已经被打破。
另一种选择,这就是我通常做的:
interface Serializer { public String toJson (); }
class PersonJsonSerializer implements Serializer {
private Person p;
public PersonJsonSerializer (Person p) { this.person = p; }
public String toJson () {
// build JSON, use p.name
}
}
Run Code Online (Sandbox Code Playgroud)
然后工厂根据实体类型分发序列化程序:
class JsonSerializerFactory {
public Serializer …Run Code Online (Sandbox Code Playgroud)