我目前正在创建一个微服务项目,在该项目中我实现了Bob Martin提出的Clean Architecture模式。虽然我的代码运行良好,但我对clean体系结构模式有一个问题,特别是接口和使用cases层。这个应用程序是我正在开发的一个小型eCommerce POC。也就是说,因为它实现了微服务,所以我有3个不同的服务。产品、图像和评论。每当请求获取“完整产品”时,客户端将ping完整产品的端点,并使用其id ping my Images和Reviews服务,以获取该产品的所有图像和评论。
那么,我的问题是,我应该在哪里实现创建这些调用的逻辑?我的直觉告诉我,我应该把它放在控制器层,因为这是两个层中最抽象的,而且我不会觉得把axios依赖放在里面太糟糕。但是,我也觉得‘一个完整的产品必须包括产品细节,它的图像和所有评论’这句话听起来很像一条商业规则。
我知道这个问题主要是主观的,但我想知道你是如何实现这个逻辑的,为什么?
我还应该提到,在我当前的解决方案中,我的使用case是我调用存储库并从数据库中实际获取Product的地方。也就是说,如果我将API调用放入控制器层,我必须首先调用我的use获取产品,然后可能创建单独用途的情况用来检查我的最终对象是否真的是一个“完整的产品”。
发布于 2021-02-21 09:23:08
从产品用例的角度获取图片和评论就像访问数据库一样。唯一的区别是您不查询数据库,而是查询另一个服务。但从您的产品角度来看,微服务和微服务都是为您的用例提供数据的外部系统。当您查看干净的体系结构时,您将意识到控制器和网关位于相同的架构层-接口适配器。这一层被称为“接口适配器”,因为它适配较低层的接口。正如您所看到的,网关可以是DB或外部接口(服务)。
因此,您应该以这种方式构建您的应用程序:
+------------------+
| product use case |
+------------------+
|
+------------------+---------------------+
| | |
V V V
+-----------------+ +------------------+ +-------------------+
| ImageRepository | | ReviewRepository | | ProductRepository |
+-----------------+ +------------------+ +-------------------+
^ ^ ^
| | |
===========+=====================+====================+================
| | |
+--------------------+ +--------------------+ +--------------------+
| ImageRestClient | | ReviewRestClient | | JDBCConnector |
+--------------------+ +--------------------+ +--------------------+
您可能希望选择另一个命名,但结构通常保持不变。
易于测试,如果有一天您决定在产品微服务中管理图像,而不是单独的服务,您可以替换使用ImageRestClient
与JDBCConnector
.
https://stackoverflow.com/questions/66293364
复制