WCF服务和大型数据表 - ddd /业务对象的任何替代方案?

时间:2013-04-29 11:36:49

标签: c# wcf dataset domain-driven-design

通常情况下,我尝试关注像DDD这样的范例,确实有一个干净的应用程序架构,用ORM,IoC等方式加盐。现在我需要设置一个WCF服务,它提供完整的数据表(包含很多列),但很少有任何业务逻辑/算法。数据来自CRM应用程序,只需要通过公共端点(WCF服务)进行传输。

应用DDD或其他域/业务对象相关的设计最终会编写很多boillerplate代码,ORM xml配置和基础设施代码,这些代码对于那些有点原始的要求来说似乎太过分了。

最好的方法是使用一些DataTable / DataSet方法,但似乎将它们与WCF一起使用是一种反模式并被认为是糟糕的设计。

那么有哪些替代方案呢?也许一些基于反射的XML序列化?有没有共同的模式?

编辑:来自CRM的数据被写入SQL服务器数据库,我必须在传输数据之前阅读该数据库。模式经常更改(添加新列)但我不必关心结构,因为我只需要将数据传输到其他地方。这就是为什么我喜欢填充DataSet / DataTables的想法

提前谢谢。

1 个答案:

答案 0 :(得分:1)

你说对于WCF服务设置所有这些只是太过分了。

当您需要设计业务应用程序时,DDD非常有用,当您需要为正在处理的域建模时。在您的情况下,业务应用程序似乎是CRM,而不是WCF服务。

我猜你是通过API从CRM应用程序中检索数据的。

我首先要做的是设计所有DTO,WCF服务将转移并定义WCF服务合同。首先设计合同,DTO允许消费者将其整合到他的应用程序中,看看它是否符合要求。

您最终可能会转移巨大的对象图,但这比尝试传输DataTable更好。我还要做的是将响应对象图封装到 methodName + Response对象中(如果需要,将请求对象封装到 methodName + Request对象中)可读性目的。

只要设计了DTO和服务合同,您只需调用CRM API,获取数据然后将其映射到DTO即可。

请确保正确分隔.sln中的内​​容,以下是处理WCF服务时的常规方法:

enter image description here

.WCF:将部署的Web项目,它只包含.svc文件和.config文件。

.Interface:我把所有DTO和服务合同放在哪里。

。实现:服务实施(您将调用CRM API)

.Mapping: DTO<> CRM数据映射类

这样,一切都正确分开。

希望有所帮助!