1

我正在开发一个 WPF 应用程序,它连接到多个 WCF 服务(与 LINQ-TO-EF 一起使用)。

WPF 以 MVVM 方式设计。

对于每个 WCF 服务,我有以下内容:

  • 服务层 DLL - 这包括服务接口、服务实现。服务实现只是创建 BL 对象并在它们上调用方法
  • 服务 BL 层 DLL - 这包括一个管理器工厂(工厂创建UserManagerTaskManager等)。每个管理器都有一个接口 + 实现(用于单元测试目的和 D​​I)。例如 - TaskManager有 'GetTasks'、'CheckTaskIsValid' 等。此外,BL 层有一个 'Trasnlator' 类来从Data-Entity转换为DTO。BL 管理器方法将 DTO 返回到服务层。

除上述内容外,所有服务 BL 均引用数据访问层 DLL,其中包括:

  • 带有来自 MS SQL Server 的表的 EDMX 文件
  • 自动生成的 DbContext + POCO 实体
  • 查询提供程序(由 BL 管理器类使用)。每个查询提供程序都有一个用于单元测试和 DI 目的的接口+实现。
  • DbContext 工厂 - 接口+实现,用于单元测试和 DI 目的。

这些服务采用 CQS 设计(Command-Query-Seperation,不与 CQRS 混合),这意味着有一个服务只负责查询,一个服务负责发送命令。

我通过托管所有服务的WCF 主机项目使用 DI(使用 AutoFac) (我实现了 IInstanceProvider,以便可以将依赖项注入服务)。

我没有实现自己的存储库或工作单元,因为 DbContext 已经UoW 和存储库。

这个设计有缺陷吗?

我看过很多关于 DDD 的帖子,我知道我的设计不是DDD。

我的问题是——我的设计够好吗?我需要将所有代码重构为 DDD 吗?(使用聚合和根聚合等)。

我已尝试提供尽可能多的有关设计的详细信息,因此我希望我不会得到诸如“您的问题太笼统”或“需要一些示例”之类的答案……非常感谢您提供任何有用的信息!

4

1 回答 1

2

是的,你没有 DDD 设计,但没有 DDD 并不意味着糟糕的设计。我认为,当您的系统是可测试的并且可以灵活地进行进一步开发时,可以扩展以满足您的需求——而不是您拥有满足您需求的良好系统设计。

所有其他听起来都不错,除了:

我没有实现自己的存储库或工作单元,因为 DbContext 已经是 UoW 和存储库。

不实现你的 UoW 和存储库意味着你与实体框架紧密耦合,这可能是可测试性的问题。但是您可以通过集成测试再次测试数据库来覆盖它。数据库逻辑的单元测试有时会测试自己。

你需要DDD吗?也许当系统比进化更复杂时,你会来到 DDD 和 CQRS。但是当它对你来说足够,易于维护和进一步开发,可测试,可扩展,当系统不脆弱时,比我认为的,最好专注于业务需求

于 2012-06-19T11:56:58.567 回答