通常情况下,我尝试关注像DDD这样的范例,确实有一个干净的应用程序架构,用ORM,IoC等方式加盐。现在我需要设置一个WCF服务,它提供完整的数据表(包含很多列),但很少有任何业务逻辑/算法。数据来自CRM应用程序,只需要通过公共端点(WCF服务)进行传输。
应用DDD或其他域/业务对象相关的设计最终会编写很多boillerplate代码,ORM xml配置和基础设施代码,这些代码对于那些有点原始的要求来说似乎太过分了。
最好的方法是使用一些DataTable / DataSet方法,但似乎将它们与WCF一起使用是一种反模式并被认为是糟糕的设计。
那么有哪些替代方案呢?也许一些基于反射的XML序列化?有没有共同的模式?
编辑:来自CRM的数据被写入SQL服务器数据库,我必须在传输数据之前阅读该数据库。模式经常更改(添加新列)但我不必关心结构,因为我只需要将数据传输到其他地方。这就是为什么我喜欢填充DataSet / DataTables的想法
提前谢谢。
答案 0 :(得分:1)
你说对于WCF服务设置所有这些只是太过分了。
当您需要设计业务应用程序时,DDD非常有用,当您需要为正在处理的域建模时。在您的情况下,业务应用程序似乎是CRM,而不是WCF服务。
我猜你是通过API从CRM应用程序中检索数据的。
我首先要做的是设计所有DTO,WCF服务将转移并定义WCF服务合同。首先设计合同,DTO允许消费者将其整合到他的应用程序中,看看它是否符合要求。
您最终可能会转移巨大的对象图,但这比尝试传输DataTable更好。我还要做的是将响应对象图封装到 methodName + Response对象中(如果需要,将请求对象封装到 methodName + Request对象中)可读性目的。
只要设计了DTO和服务合同,您只需调用CRM API,获取数据然后将其映射到DTO即可。
请确保正确分隔.sln中的内容,以下是处理WCF服务时的常规方法:
.WCF:将部署的Web项目,它只包含.svc文件和.config文件。
.Interface:我把所有DTO和服务合同放在哪里。
。实现:服务实施(您将调用CRM API)
.Mapping: DTO<> CRM数据映射类
这样,一切都正确分开。
希望有所帮助!