2011-09-29 19 views
2

我是DDD的新手,目前我尝试重构一个项目以实现域驱动的体系结构。该项目有一个客户端和一个服务器端(ASMX webservice)。现在我创建了一个名为“Domain”的类库,它由客户端应用程序以及服务器引用。.NET:DDD和ASMX,避免代理类上的多个命名空间

现在我希望我的SOAP通信基于我的域模型。但正如你所知道的,一旦建立了Web引用,ASMX webservice就会在客户端内创建一些代理类库。
这导致在不同命名空间下具有两次域实体和值对象。

  1. 是否可以直接使用域模型的通信和避免ASMX代理类的产生?

  2. 在DDD中如何使用DTO?如您所知,某些域部分可能不是可序列化的(例如NHibernate/IList用法),因此过去我经常创建更简单的DTO版本的实体类。 在域中定义DTO实体是否是常用的做法?

+0

你会选择哪种方案?你有没有试过我的? –

回答

1

被覆盖。如果你使用WCF,您可以在共享程序集中包含客户端和服务器引用的服务接口和DTO类。将项目转换为使用WCF可能不会太难,但在开始之前还有很多学习要做。

共享接口组件仅仅是一个美好的理想,如果你想在客户端和服务器是紧密结合,因此它不能很好地工作,除非两侧是由同一个团队拥有。

经常试图在服务器和客户机上使用相同的类来倾向于设计问题,但是在适合设计时共享类会节省大量工作。

(对不起,我不认为你可以使用ASMX共享的组件,它更从.NET历史的远程侧的一个概念)

+0

谢谢。服务器和客户都由我们的团队拥有。不过,我现在不想迁移到WCF,尽管从长远来看这应该是正确的方向。 关于WCF:我们的客户端软件坚持.NET 2.0,所以对于一些博客,我不得不使用BasicHTTPBinding。此绑定是否也支持使用通用的域库? – mbue

+0

@mbue,您可以使用托管在IIS中的.net远程处理(我已经在过去完成了这项工作,并且它运行良好,只要您控制两端)我记得“Ingo Rammer”书籍对此非常有帮助。 –

0

这是不可能使用原始域模型(由-not一个WEB参比到域模型的引用获得),用于与通信ASMX:必须使用由ASMX即露出的模型相似但不相同(即List在Array中转换)。

这是可能的 - 和了解快速创建具有相同的命名空间许多Web服务的许多类
创建.BAT文件这样

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe" /sharetypes /o:C:\code\MyProxy.cs /namespace:MyProxies http://website/FirstService.asmx http://website/SecondService.asmx 
Pause 


- "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe"Wsdl.exe用使用相对路径(它必须是你的电脑上)
- /sharetypes意味着你只想要1名称空间输出中
- /o:C:\code\MyProxy.cs.cs文件名称将包含创建
的所有类 - /namespace:MyProxies命名空间创建
的所有类
- http://website/FirstService.asmx http://website/SecondService.asmx的是,你需要调用web服务的列表
- Pause意味着你想窗口的SHEL保持开放阅读操作的反馈。



1)所有的指令必须在一行(不按Enter键); Pause在第二行。
2)如果/o:C:\code\MyProxy.cs将是您的解决方案的一部分,(我想是这样),你使用源控制文件必须被检查出通过Wsdl.exe用