2011-08-24 32 views
0

我有四个项目:
1.业务项目,定义我的项目的企业登录。
2.定义合同界面和DTO的服务合同项目。
3.定义服务实现的服务实现项目。
4.使用服务的svc文件的Web应用程序。WCF合同知道域名

理论上:
答:合同项目应该没有人参考。
B.服务实施应引用合同项目和域。 C.网络应用程序应仅引用合同和实施项目。

我的服务是这样的:

AccoundData GetAccount(AccountTypeEnum type); 

的问题是,AccountTypeEnum域中定义,从而使合同和Web应用程序应该有参考域。但是这就是我们正在努力以防止..那么我怎样才能防止“知道”域名的合同?

+3

WCF契约具有对您的域对象进行操作的方法 - 它怎么可能不知道**域?!?!!? –

+0

@marc_s:合同只是一个接口而不是实现。来自域的结果存储在数据传输对象上。因此,合同为什么要知道域名?如果知道的话,你也会强迫我们的项目知道域名。 – Naor

回答

2

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

+0

没有任何其他解决方案,然后创建与服务之间的每种类型的DTO?它不认为代码重复?每当我改变枚举 - 我将不得不改变枚举的DTO。 – Naor

+0

如果你想要这样严格的分离,你必须付出额外的努力到你的应用程序。我不知道自动DTO创建的工具 - DTO应该专门针对操作需求,所以您必须始终自己做。对于枚举,你可以为它们的创建创建T4模板,但它会更复杂,然后手动创建它们。如果您不想付出额外的努力,将您的合同项目与您的服务实施项目合并。 –

+0

如何为Enum DTO创建创建T4模板?我试图搜索谷歌,但没有关于T4和枚举的信息。 – Naor