洋葱架构中的抽象工厂模式

Abstract Factory Pattern in Onion Architecture

早上好, 我的问题是关于 Visual Studio project/catalog 结构。 我正在创建一个简单的项目,我想在那里采用洋葱架构。我有几个层(项目):MyProject.Domain(枚举、实体、接口),MyProject.APIMyProject.Infrastructure.DependecyResolution,MyProject.Client.WPF

我想使用抽象工厂模式。我有 factory class,很少有 product classes.

我的"product's"接口在域->接口,我的"product's"实现在域-> >实体。在我的 Visual Studio 解决方案中,我应该放置工厂的接口和实现(这将创建那些 产品 )吗?

我的问题是:工厂接口工厂具体实现的一部分吗?洋葱拱门。?或者我应该为工厂创建另一个项目吗?这个问题更多的是关于良好的编程实践,保持Visual Studio解决方案干净整洁。

没有一个正确答案。也许您可以创建一个文件夹 'core' 来放置所有核心代码。只在其中创建一个 'interfaces' 文件夹并没有错,通常会看到一个名为 'entities' 的文件夹,其中包含各种数据 类.

My question is: Is Factory interface or Factory concrete implementation part of Domain in Onion Arch.?

我不是 Onion Architecture 哲学方面的专家,但有一些论据支持将工厂与产品放在同一个包中:

  • 工厂是可见的,产品是包装可见的(意思是外部客户不能直接访问产品,必须经过工厂),
  • 通过 Robert Martin 的 REP(重用发布等效原则)实现包内聚 "The granule of reuse is the granule of release." 如果你不将工厂与他们的产品捆绑在一起,包就不会轻易重用。

我的想法是在软件核心的域项目中创建Ifactories文件夹,但在上层实现它们

在核心中引入接口的好处是上层可以使用它们

在上层带来实现的好处是封装实现