从WCF服务访问域驱动的设计类LIbraries

时间:2011-01-09 19:37:47

标签: wcf domain-driven-design repository

我需要一些帮助来澄清我应该如何设置我的项目。我的解决方案结构如下:

Company.DataTransferObjects
--AdminDTO.cs
--CustomerDTO.cs
Company.DataTransferObjects.Helpers
Company.Infrastructure.DomainServices
--Admin
---AdminService.cs
--Customer
--CustomerService.cs
Comapny.Infrastructure.Repositories
--Admin
---AdminRepository.cs
--Customer
---CustomerRepository.cs
Company.Domain
--Admin
---Admin.cs
---IAdminRepository.cs
--Customer
---Customer.cs
---ICustomerRepository.cs
Company.WebServices
--WebApi.cs
--IWebAPI.cs

我的问题如下:

1)我的设置看起来对你好吗?

2)DTO。从Web服务的角度来看,DTO应该在哪里创建? 我应该在独立的类库中创建DTO并引用它 他们来自WebService还是应该成为我的Web服务项目的一部分?

另外,我不清楚我的DTO应该如何与我的Domain对象进行交互。 有人可以从程序流程的角度解释他们的目的,具体来说,如果你正在创建一个WCF服务,你将如何操纵它们?

3)域名服务。我仍然很难围绕域名服务的目的进行思考。这是否暴露了未访问数据库的操作功能,并且需要无法直接访问的存储库方法? 换句话说,域服务是一种操纵多个存储库方法的方法吗?因此,如果我的WCF服务正在调用可以通过存储库方法访问的数据,那么它就应该这样做。但是,如果它需要的数据是多个存储库方法的结果,那么这应该通过域服务来完成吗?

4)Facade Pattern在DDD架构中的位置是什么?

请原谅我的困惑,我想了解。如果你能告诉我“应该从我的WCF服务访问什么”,这将是一个严重的帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

对你的问题采取相反的顺序:

4)您的网络服务是您网域的有效屏障。

3)域服务也可以访问数据库,它们通常是消耗代码用于在涉及多个实体的任何事物上与您的域进行通信的主要API,或者代表一系列事务步骤的事物。有些人认为存储库是域服务的特例(而不是一个/或者)。我通常认为我的服务是我域名的公共接口。

2)当您(或计划最终)越过物理边界时,DTO通常很有用。只要您认为可能需要序列化某些内容(例如,转换为SOAP消息),您就要考虑DTO。在您的情况下,您的WCF项目将使用DTO作为其DataContracts,但在内部它可能使用您的域对象(除非您希望您的域位于不同的应用程序域或不同的物理盒中)。

1)这都是个人喜好;你的布局看起来并不合理,虽然它与我通常的组织方式不同。