使用WCF的DDD项目结构

yo.*_*yo. 5 c# architecture wcf 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

我对吗 ?

Kla*_*sen 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.

无论如何,这只是我的看法.请随意询问是否有一些需要澄清.

祝这个项目好运.

/克劳斯