使用WCF的DDD项目结构

时间:2009-11-29 21:02:15

标签: c# wcf architecture domain-driven-design

我正在启动一个基于WCF的新项目,该项目由“引擎”和一些桌面应用程序组成。 但我发现很难建立我的项目结构。

  • 引擎(Windows服务,托管桌面应用程序的WCF服务访问并托管我的所有业务逻辑)
  • 桌面应用程序(仅演示文稿)

  • 共享

  • MyProject.Core(客户/客户,客户/ ICustomerService)

  • 引擎

    • MyProject.Engine(Customers / CustomerService,Customers / ICustomer,Customers / ICustomerRepository)
    • MyProject.Infrastructure.SqlServer(客户/客户(LinqToSql Specific),Customers / CustomerRepository)
  • WinForm应用程序

  • MyProject.Core
  • MyProject.UI

我是对的吗?

1 个答案:

答案 0 :(得分:21)

如果您正在进行DDD,我发现您没有域模型很奇怪。你有一个所谓的引擎,它有多个问题。它实现了您的业务逻辑,并且知道将业务逻辑托管为Windows服务。

我建议如下项目结构:

MyProject.Model :定义抽象存储库,实体,值对象,服务(DDD术语)和其他域逻辑。它没有引用其他项目

MyProject.DataAccess :使用linq2sql实现存储库。有对MyProject.Model的引用

MyProject.ServiceModel :包含服务合同和其他相关内容,将您的域模型公开为WCF服务。此项目还将包含服务所服务和接受的域对象的服务特定表示。这样做的原因是您可能不应该使用WCF数据协定中所需的属性来装饰您的域类。该项目引用了MyProject.Model。

MyProject.Service :包含服务的app.config并通过自定义ServiceHost和ServiceHostFactory执行依赖项注入。它引用了MyProject.Model MyProject.ServiceModel和MyProject.DataAccess +您最喜欢的DI框架(例如Windsor Castle)

MyProject.PresentationModel :定义要在UI中使用的各种视图模型和命令。它具有对MyProject.Service公开的服务的服务引用

MyProject.WinUI :您的WPF应用。参考MyProject.PresentationModel。

请注意,您在Eric Evans关于DDD的书中可能阅读的大部分内容仅涉及MyProject.Model的内容。其他项目正在组成额外的层,而不是直接在先生处理过。埃文斯的书。

请记住,通过明确区分关注点并使用依赖注入,您将最终获得易于测试的代码。根据我上面提出的结构,您应该能够测试几乎所有内容,因为您的UI将仅包含XAML。

无论如何,这只是我的看法。如果其中一些需要澄清,请随时询问。

祝你好运。

/克劳斯