我想标题本身就说明了问题,但您通常将工厂放在清洁架构的哪一层?
如果工厂接口与实现不在同一层,我也想知道这一点。
谢谢!
工厂接口被认为是创建领域实体的抽象概念,因此属于领域核心圈。
工厂实现处理实体创建的技术细节,因此属于基础设施圈。
通常,工厂返回的实体由放在域圈内的接口或抽象类表示,而具体实体类放在基础设施圈内。
您通常将工厂放在Clean Architecture的哪一层?
工厂是一个不属于一个体系结构层的概念。你可以在任何你想要解耦一个层或架构边界的地方使用它。
当一个架构上下文中的客户端需要实例化它不应该依赖的另一个架构上下文中的对象时使用。例如,实体使用框架或库对象。
也经常被应用程序启动或主组件使用。详情请看这里。
如果工厂接口与实现不在同一层,我也想知道这一点。
接口通常放在使用它的客户端旁边,因为接口是为客户端而不是实现者创建的。客户需要有人做一些事情。因此,客户端通过接口告诉客户它想要什么。实现者展示了如何完成它。
+--------+ ||
| client | ||
+--------+ ||
| ||
V ||
+-----------+ || +-------------+
| Interface | <-||--- | Implementor |
+-----------+ || +-------------+
|| = architectural boundary
有时候你想要有一个接口来服务不同架构环境中的许多客户端。然后,您可以将接口从两个上下文中分离出来。
+----------+ ||
| client 1 | ||
+----------+ ||
||
| ||
======|==========||=================
| ||
V ||
||
+-----------+ || +-------------+
| Interface | <-------- | Implementor |
+-----------+ || +-------------+
||
^ ||
| ||
======|==========||==================
| ||
||
+----------+ ||
| client 2 | ||
+----------+ ||
或者您可以为每个客户端使用单独的接口,并让实现者实现。
+----------+ ||
| client 1 | ||
+----------+ ||
| ||
V ||
+-----------+ ||
| Interface | <---------------+
+-----------+ || |
|| +-------------+
=================|| | Implementor |
|| +-------------+
+-----------+ || |
| Interface | <---------------+
+-----------+ ||
^ ||
| ||
+----------+ ||
| client 2 | ||
+----------+ ||
您也可以使用2个实现者。每个接口一个。