Martin Fowler在API中对avoid automatic deserialization说:
我更愿意完全避免自动反序列化。自动 反序列化通常属于WSDL耦合的陷阱 消费者和生产者通过复制静态类结构 两者。
这意味着什么?
是否在没有任何"转换器的情况下在每个休息服务中接收所有信息作为JSON"在中间?
通过"转换器"我的意思是一些类型的适配器,就像在GsonBuilder中一样。
答案 0 :(得分:1)
通过自动反序列化,他意味着JSON
对象的预定义硬结构用于检索对象本身。
但这适用于大多数用例。
预定义结构的示例是Java Class or XML XSD
。
自动反序列化通常属于WSDL陷阱,它通过在两者中复制静态类结构来耦合使用者和生产者。
他在这里的意思是使用类进行反序列化与使用WSDL
序列化或反序列化对象相同。
与类和XSD文档的硬结构相反,JSON更加轻松,因为它基于Javascript,允许在对象定义的生命周期的任何一点修改对象定义。 / p>
所以替代方法是在Java组合中使用HashMap and ArrayList
(或解析String本身)来反序列化对象,因为即使服务器产生不同的东西(如新字段),也不需要进行任何更改。客户方。新客户可以利用新领域。
在硬结构中,由于模型类的共享结构,生产者和消费者都是强耦合的,因此生产者的任何变化都必须反映在消费者中。
在我工作的一些SOA
项目中,我们曾在所有request/response
对象中添加一些额外的字段以供将来使用,这样就无需更改生产中运行的客户端以适应新客户的需求。这些字段有一些随机名称,如customParam1 to customParam5
,其中这些字段的含义随文档一起发布。这些名称并不直观,因为我们将共享结构或模型上的生产者和消费者联系起来。