如何基于契约或模式执行序列化?

问题描述:

在我目前的项目中,我们使用二进制xml序列化来存储与winforms应用程序中用户设置相关的数据。如何基于契约或模式执行序列化?

目前,我们有两个方面的挑战:

  1. 序列化是通过属性正在实施的类,也有编织成他们的业务逻辑。
  2. 在不影响检索已存储数据的能力的情况下重新分配这些类很困难。

我的主要目标是隔离数据合同,以便它不稀释或限制其他逻辑,以便我可以在需要时为现有数据提供迁移路径。

为什么不创建一个对等的可序列化对象,其作用仅仅是支持序列化/反序列化?可序列化类可以具有用于将实际对象推入或推出序列化的方法,也可以使用单独的数据映射类(如果您有严重的版本问题,这可能会更好)。

这样,你的主要应用程序对象就永远是无知的,你不必为了支持序列化而做出妥协 - 比如公共getter和setter和attributes。最终结果将是一个序列化层,它与应用程序层的变化分离。

在n层应用程序中,这些通常被称为数据传输对象(DTO),尽管在此处描述的情况下该术语不是通常应用的。

+0

您可以使用http://www.codeplex.com/AutoMapper将您的业务对象映射到DTO。 – zvolkov 2009-07-09 15:52:57