首页 文章

WCF中的动态数据协定

提问于
浏览
2

在客户端和WCF服务之间传输实体有一些难点 .

  • 通过序列化所有属性来击败延迟加载

  • 序列化数据可能会不必要地膨胀

  • UI和业务层之间的某种耦合

解决这些问题的一种方法是传输DTO而不是实体,但我知道这种技术有其自己的一些警告(我所知道的最大的一个是维护这些功能特定的DTO所需的类型) .

我认为如果服务实现可以动态生成这些DTO并且this appears to be possible会很棒 . 不幸的是,看起来 Contract 将在客户端松散定义(即"object")并且闻起来有可能存在风险 .

是否建议以这种方式使用动态DTO,或者是否有其他方法可以使用DTO而无需为每个DTO创建/维护类?

我认为圣杯将是实施动态生成DTO的地方,但客户看到明确定义的 Contract . 我猜这是WCF无法做到的 .

2 回答

  • 1

    我想问题是你要从中产生什么?您必须在某些地方描述您要传输的数据 . 如果您拥有的只是域对象,那么您最终会处于通过域对象传输数据的类似位置 .

    DTO启用的关键功能之一就是解耦,这样您就可以在不打乱服务消费者的情况下改进域对象 . 如果您动态生成DTO,那么您将级联更改 - 除非您将动态创建视为一次性练习以开始使用DTO

  • 2

    DTO是任何其他数据 Contract ,必须定义 . 当您选择使用DTO时,您需要添加一层必须维护的复杂性 . 有些工具可以帮助您在域对象和DTO(如AutoMapper)之间进行映射,但您的责任是定义DTO应该传输的内容 - 这是很难自动完成的 . 即使使用自动化工具,您仍然需要维护一些将用于生成代码的DTO定义 .

相关问题