gpt4 book ai didi

c# - 使用 WCF 的 DDD 项目结构

转载 作者:太空狗 更新时间:2023-10-29 22:05:58 25 4
gpt4 key购买 nike

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

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

  • 共享

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

  • 引擎

    • MyProject.Engine(客户/客户服务、客户/ICustomer、客户/ICustomerRepository)
    • MyProject.Infrastructure.SqlServer(客户/客户(特定于 LinqToSql)、客户/CustomerRepository)
  • WinForm 应用程序

  • MyProject.Core
  • 我的项目.UI

我说得对吗?

最佳答案

如果你在做 DDD,我觉得你没有领域模型很奇怪。你有一个所谓的引擎,它有多个问题。它实现您的业务逻辑并知道如何将您的业务逻辑托管为 Windows 服务。

我建议的项目结构如下:

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

MyProject.DataAccess:使用 linq2sql 实现存储库。引用了 MyProject.Model

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

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

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

MyProject.WinUI:您的 WPF 应用程序。引用 MyProject.PresentationModel。

请注意,您可能在 Eric Evans 的有关 DDD 的书中读到的大部分内容只涉及 MyProject.Model 的内容。其他项目构成了 Mr. 中未直接提及的附加层。埃文斯的书。

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

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

祝项目顺利。

/克劳斯

关于c# - 使用 WCF 的 DDD 项目结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com