没有生成DTO类的WCF数据服务

时间:2013-11-16 12:16:15

标签: wcf wcf-data-services n-tier-architecture

我正在计划我的第一个N层架构,目前正在考虑如何最好地利用WCF数据服务。它看起来是一个很好的工具,除了我对客户端生成的数据协定类没有兴趣。我不喜欢需要像AutoMapper这样的其他工具然后将修改后的域对象投影到DTO中,然后再将更改发送回服务器。 WCF数据服务似乎不需要这些生成的DTO类。似乎可行的是,它只能为我提供一种方法,以一般形式将更改跟踪信息(即增量)发送回服务器。

实际上我是否可以在没有客户端生成的DTO类的情况下利用WCF数据服务的更改跟踪功能?

2 个答案:

答案 0 :(得分:0)

我认为要做你想做的事,你必须自己在客户端实现OData REST协议,例如使用Atom XML或JSON(都支持)。

但是如果您对此持开放态度,我建议您考虑使用基本的WCF数据合同和服务合同,并在层之间定义您自己的完美服务接口,而不是将其与您的数据模型过于紧密地联系起来。 Microsoft可以轻松地将您的实体模型公开给其他层以进行快速开发,但这可能会有一些严重的缺点。例如,更改实体模型可能会导致其他层发生意外的向上更改。我的团队以这种方式开始并迅速遇到问题,因此最终我们选择花更多的时间来定义层之间的确切契约,建模我们的业务对象,然后以我们想要的方式实现数据库持久性。例如,我们离开了实体框架,并切换到Dapper.NET而无需更改服务的其他客户端。

即使使用WCF数据合同,在创建服务引用时,您仍可能最终生成客户端合同。但是您可以通过共享数据协定DLL来避免这种情况,因此客户端和服务器具有完全相同的类并且没有重复。如果您的项目都在同一个SDLC下,我只会建议您。

您必须决定的权衡之一是在跨层保持数据对象的翻译以获得灵活性,或者使用较少的代码将所有层紧密地耦合在同一模型上之间进行选择。

答案 1 :(得分:0)

你可以使用WCF Proxies,它有助于在没有DTO的情况下构建wcf服务..

请参阅此示例:http://www.codeproject.com/Articles/786601/Ways-to-generate-proxy-for-WCF-Service