【问题标题】:WCF contract know the domainWCF 合约知道域
【发布时间】:2011-08-24 14:02:20
【问题描述】:

我有四个项目:
1. 定义我项目的业务登录的业务项目。
2. 定义合约接口和DTO的服务合约项目。
3. 定义服务实现的服务实现项目。
4. 带有使用该服务的 svc 文件的 Web 应用程序。

理论上:
A. 合同项目不得参考任何人。
B. 服务实现应参考合同项目和领域。
C. Web 应用程序应仅引用合同和实施项目。

我有这样的服务:

AccoundData GetAccount(AccountTypeEnum type);

问题是在域中定义了AccountTypeEnum,因此合同和Web应用程序应该引用域..但这是我们试图阻止的..那么我该如何防止合同“了解”域?

【问题讨论】:

  • WCF 合约的方法在您的域对象上运行 - 它怎么会不知道域?!?!!?
  • @marc_s:合约只是一个接口而不是实现。来自域的结果存储在数据传输对象中。因此,合约为什么要知道域?如果它知道,你强迫我们的项目也知道这个领域。

标签: c# .net wcf


【解决方案1】:

在这种情况下,您的合同必须使用不同的枚举/DTO,并且您的服务实现必须在合同枚举和域枚举之间进行转换。

【讨论】:

  • 除了为与服务通信之间的每种类型创建 DTO 之外,没有其他解决方案吗?.. 它不考虑代码重复吗?每当我更改枚举时 - 我必须更改枚举的 DTO。
  • 如果您想要如此严格的分离,您必须为您的应用程序付出额外的努力。我不知道用于自动创建 DTO 的工具 - DTO 应该特定于操作需求,因此您必须始终自己做。对于枚举,您可能可以创建 T4 模板来创建它们,但它会更复杂然后手动创建它们。如果您不想付出额外的努力,请将您的合同项目与您的服务实施项目合并。
  • 如何为 Enum DTO 创建创建 T4 模板?我正在尝试在 google 上搜索,但没有关于 T4 和 Enums 的信息。
  • 您必须从头开始创建模板 - 它必须经过程序集,找到该程序集中定义的所有枚举并为它们创建 DTO 或其他枚举。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
相关资源
最近更新 更多