WCF中的动态数据协定

时间:2011-06-17 14:45:51

标签: wcf soa dto

在客户端和WCF服务之间传输实体方面存在一些难点。

  • 通过序列化所有属性来击败延迟加载
  • 序列化数据可能会不必要地膨胀
  • UI和业务层之间的某种耦合

解决这些问题的一种方法是传输DTO而不是实体,但我知道这种技术有一套自己的注意事项(我所知道的最大的一个是维护这些功能特定的DTO所需的输入)。

我认为如果服务实现可以动态生成这些DTO并this appears to be possible,那将是很好的。不幸的是,看起来合同将在客户端(即“对象”)松散定义,并且闻起来可能存在风险。

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

我认为圣杯将是实施动态生成DTO的地方,但客户看到明确定义的合同。我猜这对WCF来说是不可能的。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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