0

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

应用 DDD 或其他与域/业务对象相关的设计最终会编写大量样板代码、ORM xml 配置和基础设施代码,这些代码对于那些有些原始的需求来说似乎太大了。

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

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

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

先感谢您。

4

1 回答 1

1

你说得对,只为 WCF 服务设置所有这些都太大了。

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

我猜您正在通过 API 从您的 CRM 应用程序中检索数据。

我首先要做的是设计 WCF 服务将传输的所有 DTO 并定义 WCF 服务合同。通过首先设计您的合同和 DTO,消费者可以将其集成到他的应用程序中,并查看它是否符合要求。

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

一旦您的 DTO 和服务合同设计完成,您只需调用您的 CRM API,获取数据,然后将它们映射到您的 DTO。

确保正确分离 .sln 中的内容,这是我过去在处理 WCF 服务时的做法:

在此处输入图像描述

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

.Interface:我放置所有 DTO 和服务合同的地方。

.Implementation:服务实现(您将在其中调用您的 CRM API)

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

这样,一切都正确分离。

希望有帮助!

于 2013-04-29T12:47:11.277 回答