XML的二进制框架
我们都使用了数十个序列化框架--用于JSON、XML、二进制和ORM(它们实际上是关系数据库的序列化框架)。而且总有这样的时刻,你需要从一个物体中排除一些字段--使它成为“短暂的”。
到目前为止还不错,但是在同一项目/运行时中,一个对象被多个序列化框架使用。不一定是这样,但让我首先讨论两个备选方案:
- 对于所有序列化使用相同的对象(API使用JSON/XML,内部归档使用二进制序列化,ORM/数据库)--如果序列化/持久化字段之间的差异很小,则首选。使用相同的对象可以节省DTO之间繁琐的传输。
- 在不同的序列化中使用不同的DTO--当场景变得更加复杂,使用相同的对象就成了定制和异常的杂乱无章的工作时,这就变得非常必要了。
请注意,这两种策略都可以存在于同一个项目中--有简单的对象和复杂的对象,对于后者,只能有多种DTO。但让我们讨论第一种选择。
如果每个序列化框架都有自己的“临时”注释,那么很容易调整一个或两个字段的序列化。更重要的是,它将有可预测的行为。如果不是,那么您可能被迫拥有单独的DTO,即使对于跨序列化目标的一个字段的行为不同的类也是如此。
例如,前几天我有一个惊喜--我们使用Java二进制序列化(ObjectOutputStream)对大型集合进行内部缓冲,然后对对象进行索引。在应用程序的一个完全独立的部分中,同一个类的对象会使用与二进制序列化无关的其他属性进行索引,因此使用Java临时修饰符标记。结果是,gson尊重“瞬态”修饰符,这些字段从未被索引过。
最后,这篇文章有两点。第一种是--期待序列化框架中的任何行为,并进行测试以验证不同的序列化场景。第二个是针对框架设计人员的--不要重用语言本身或其他框架中的临时修饰符/注释,这是违反直觉的。

浙公网安备 33010602011771号