在WCF中的域和服务层之间传输用户类型 - 建议的方法?

时间:2011-04-16 11:40:30

标签: c# java wcf web-services design-patterns

问题很熟悉 - 当通过服务边界编组用户定义/域类型时,我们只是用[DataContract]属性注释富域域对象(从而用ServiceModel构造污染域),或者我们实现某种类型的DTO流程(创造额外的工作,可以说是微不足道的好处)?

  • 人们如何解决这场冲突?还有其他方法有更少的缺点吗?
  • 如果您正在使用DTO方法,那么如何实现从域对象到DTO的属性值传输?

由于

3 个答案:

答案 0 :(得分:3)

你大多回答了你的问题。如果你想要非常清晰的设计使用DTO。如果您不想添加额外的复杂层,请使用DataContract / DataMember属性标记类,或使用defalut序列化(仅限.NET3.5和更新版本),它将获取所有公共属性(使用getter和setter)+您可以使用IgnoreDataMember属性从序列化中删除一些属性。要将域对象映射到DTO和DTO到域对象,可以使用AutoMapper

答案 1 :(得分:0)

如果您使用DTO(我的建议),您可以使用汇编程序模式将信息从DTO传输到实体,反之亦然。您可以手动执行,也可以使用工具。 AutoMapper是一个很好的建议。

答案 2 :(得分:0)

这可能是显而易见的,但我想补充拉迪斯拉夫所说的话。就像他提到的那样,你可以使用POCO类型,但你也可以灵活地使用IXmlSerializable,ISerializable,Serializable等等;这些其他序列化moel没有与IgnoreDataMember一起使用的灵活性。

有关详细信息,请参阅this blog post。它还详细说明了DataContractSerializer如何在同一类型上优先考虑两个冲突的编程模型。