2009-12-04 36 views
3

我正在构建一个将数据公开为XML的REST API。我在我的领域层中有一大堆领域类,这些领域类旨在供API后面的服务层和我们将提供给客户的客户端API使用。 (客户可以选择直接与REST API交互,但客户端API简化了这些事情)。我想让我的域类清除任何数据持久性逻辑,但是我试图弄清楚域类是否可以实现IXmlSerializable来帮助简化序列化通过并从中检索的数据的过程API。我开始认为我会保持域类没有任何序列化逻辑,而是用序列化行为来修饰它们,例如,将域对象包装在处理序列化的对象中。我是否让事情比他们需要的更复杂?有关我应该如何处理这个问题的想法?谢谢!域对象是否应该实现IXmlSerializable?

回答

5

域类只应关注业务逻辑,而不是持久化或序列化。

您应该创建一组数据传输对象(DTO)类,每个类对应于一个域类。这些类只包含您决定公开的域类的属性。这允许域类具有不通过持久性或序列化层公开的属性。

只有DTO对象才会被序列化和反序列化。

然后,您可能会发现创建静态“translate”方法以在域和DTO对象之间进行转换很方便。

+0

你的序列化图层会是什么样子?你会有方法接受DTO并以XML格式输出吗?或者你会采取一个流并序列化到它? – csano 2009-12-04 04:29:09

+0

这取决于我需要什么。我倾向于遵循.NET中许多基于XML的API的模式,并接受一个“XmlWriter”作为目标。如果我发现调用代码从流中重复创建'XmlWriter',我会添加一个需要流的重载。如果我使用'XPathNavigator.AppendChild'创建'XmlWriter'找到调用代码,那么我会写一个接受'IXmlNavigable'的重载,等等。 – 2009-12-04 04:35:02

+0

谢谢,John,我很感激。 – csano 2009-12-04 04:49:19

相关问题