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

本文关键字:服务 传输 类型 用户 之间 WCF 方法 | 更新日期: 2023-09-27 17:50:32

这个问题很熟悉——当通过服务边界编组用户定义的/域类型时,我们是简单地用[DataContract]属性注释富域对象(从而用ServiceModel构造污染域),还是实现某种DTO过程(创建额外的工作,但毫无益处)?

  • 人们如何解决这个冲突?有没有其他缺点更少的方法?
  • 如果你使用DTO方法,你如何实现属性值从域对象到DTO的转移?

谢谢

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

你基本上回答了你的问题。如果你想要非常清晰的设计,使用DTO。如果你不想添加额外的复杂层,要么用DataContract/DataMember属性标记类,要么使用默认的序列化(只有。net3.5和更新的),它接受所有公共属性(带有getter和setter) +你可以通过使用IgnoreDataMember属性从序列化中删除一些属性。要将域对象映射到dto,将dto映射到域对象,可以使用AutoMapper。

如果您使用DTO(我的建议),您可以使用汇编器模式将信息从DTO传输到实体,反之亦然。你可以手工做,也可以使用工具。AutoMapper是个不错的建议。

这可能是显而易见的,但我想补充Ladislav所说的。就像他提到的,您可以使用POCO类型,但您也可以灵活地使用IXmlSerializable、isserializable、Serializable等等;这些其他序列化模型不具备与IgnoreDataMember一起使用的灵活性。

查看这篇博文了解更多信息。它还详细介绍了DataContractSerializer如何在同一类型上优先考虑两个相互冲突的编程模型。