首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >干净的架构:在哪里进行API调用

干净的架构:在哪里进行API调用
EN

Stack Overflow用户
提问于 2021-02-20 15:34:27
回答 1查看 1.6K关注 0票数 4

我目前正在创建一个微服务项目,在该项目中我实现了Bob Martin提出的Clean Architecture模式。虽然我的代码运行良好,但我对clean体系结构模式有一个问题,特别是接口和使用cases层。这个应用程序是我正在开发的一个小型eCommerce POC。也就是说,因为它实现了微服务,所以我有3个不同的服务。产品、图像和评论。每当请求获取“完整产品”时,客户端将ping完整产品的端点,并使用其id ping my Images和Reviews服务,以获取该产品的所有图像和评论。

那么,我的问题是,我应该在哪里实现创建这些调用的逻辑?我的直觉告诉我,我应该把它放在控制器层,因为这是两个层中最抽象的,而且我不会觉得把axios依赖放在里面太糟糕。但是,我也觉得‘一个完整的产品必须包括产品细节,它的图像和所有评论’这句话听起来很像一条商业规则。

我知道这个问题主要是主观的,但我想知道你是如何实现这个逻辑的,为什么?

我还应该提到,在我当前的解决方案中,我的使用case是我调用存储库并从数据库中实际获取Product的地方。也就是说,如果我将API调用放入控制器层,我必须首先调用我的use获取产品,然后可能创建单独用途的情况用来检查我的最终对象是否真的是一个“完整的产品”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-21 09:23:08

从产品用例的角度获取图片和评论就像访问数据库一样。唯一的区别是您不查询数据库,而是查询另一个服务。但从您的产品角度来看,微服务和微服务都是为您的用例提供数据的外部系统。当您查看干净的体系结构时,您将意识到控制器和网关位于相同的架构层-接口适配器。这一层被称为“接口适配器”,因为它适配较低层的接口。正如您所看到的,网关可以是DB或外部接口(服务)。

因此,您应该以这种方式构建您的应用程序:

代码语言:javascript
运行
AI代码解释
复制
+------------------+
                       | product use case |
                       +------------------+
                                |
             +------------------+---------------------+
             |                  |                     |
             V                  V                     V
    +-----------------+ +------------------+ +-------------------+
    | ImageRepository | | ReviewRepository | | ProductRepository |
    +-----------------+ +------------------+ +-------------------+
            ^                     ^                    ^
            |                     |                    |
 ===========+=====================+====================+================
            |                     |                    |
 +--------------------+ +--------------------+ +--------------------+
 |   ImageRestClient  | | ReviewRestClient   | |   JDBCConnector    |
 +--------------------+ +--------------------+ +--------------------+

您可能希望选择另一个命名,但结构通常保持不变。

易于测试,如果有一天您决定在产品微服务中管理图像,而不是单独的服务,您可以替换使用ImageRestClientJDBCConnector.

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66293364

复制
相关文章
CAN通信的数据帧和远程帧「建议收藏」
(先来一波操作,再放概念) 远程帧和数据帧非常相似,不同之处在于: (1)RTR位,数据帧为0,远程帧为1; (2)远程帧由6个场组成:帧起始,仲裁场,控制场,CRC场,应答场,帧结束,比数据帧少了数据场。 (3)远程帧发送特定的CAN ID,然后对应的ID的CAN节点收到远程帧之后,自动返回一个数据帧。
全栈程序员站长
2022/07/23
6.7K0
CAN通信的数据帧和远程帧「建议收藏」
详解CAN总线:标准数据帧和扩展数据帧
CAN协议可以接收和发送11位标准数据帧和29位扩展数据帧,CAN标准数据帧和扩展数据帧只是帧ID长度不同,以便可以扩展更多CAN节点。
不脱发的程序猿
2022/10/04
10.5K0
详解CAN总线:标准数据帧和扩展数据帧
数据帧的学习整理
事先声明,本文档所有内容均在本人的学习和理解上整理,不具有权威性,甚至不具有准确性,本人也会在以后的学习中对不合理之处进行修改。
全栈程序员站长
2022/09/20
2.9K0
数据帧的学习整理
[视频编码] 视频编码的三种帧:I帧,B帧,P帧
在视频压缩编码中,所有的帧被分成了三个种类,I帧,B帧和P帧,其实就是Intra-Prediction帧,Bi-prediction帧和Prediction帧。顾名思义,就是帧内预测帧,双向预测帧以及(单向)预测帧。
轻舞飞扬SR
2021/02/24
2.3K0
视频中的 I 帧,P 帧,B 帧
视频传输原理 视频是由一幅幅帧图像和一组音频构成的,视频的播放过程可以简单理解为一帧帧的画面按照时间顺序呈现出来的过程。但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整的图片,那么一个视频的体积就会很大。这样对于网络传输或者视频数据存储来说成本太高,所以通常会对视频流中的一部分画面进行压缩(编码)处理。 编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures ) 如下图, 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。GO
用户1097444
2022/06/29
3.7K0
视频中的 I 帧,P 帧,B 帧
函数栈帧的创建和销毁
函数栈帧( stack frame )就是函数调用过程中在程序的调用栈( call stack )所开辟的空间,这些空间是用来存放:
xxxflower
2023/04/16
8900
函数栈帧的创建和销毁
[C语言]函数栈帧的创建和销毁
返回值并不会随着函数作用域的销毁而销毁,而是放在eax中准备返回,当通过pop出栈回到main函数中再将返回值放到局部变量中。
IT编程爱好者
2023/04/12
5610
[C语言]函数栈帧的创建和销毁
函数栈帧的创建与销毁
最近在学习C语言的过程中遇到了一些问题,在询问老师和查询相关资料的基础上了解到了函数栈帧的相关概念,对下列问题也有了答案。
摘星
2023/04/28
5460
函数栈帧的创建与销毁
CAN总线学习笔记(2)- CAN协议数据帧与遥控帧
依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!
全栈程序员站长
2022/09/14
2.7K0
CAN总线学习笔记(2)- CAN协议数据帧与遥控帧
函数栈帧的创建和销毁
        ①函数参数和函数返回值    ②临时变量(包括函数的非静态的局部变量以及编译器自动生产的其他临时变量)   ③保持上下文信息(包括在函数调用前后需要保持不变的寄存器)
二肥是只大懒蓝猫
2023/03/28
7890
函数栈帧的创建和销毁
创建和使用逐帧动画
AnimationDrawable可以用来创建一个新类是由一个表示Drawable资源-frame动画,可以使用XML。在的应用res/drawable讲动画目录Drawable资源定义为外部资源。
全栈程序员站长
2022/07/05
3710
JAVA腾晖数据帧对接指南
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示,其中:A~F相当于十进制的10~15,这些称作十六进制数字。
gang_luo
2020/08/13
3.9K1
JAVA腾晖数据帧对接指南
音频帧、视频帧及其同步
音频帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为一帧就是编码后的一副图像,而音频帧会因编码格式的不同而不同,如 PCM 音频流可以直接进行播放,下面以 MPEG 音频帧格式为例介绍音频帧。
刘盼
2021/02/08
4.2K0
IP协议的数据帧长度是多少
1、如果使用PPP协议,帧最大长度1510字节,其中数据长度(加载上层的协议数据)不超过1500字节; 2、如果在以太网中,帧的长度为:64~1518字节(10~100Mbps 的以太网),1G及以上的以太网,帧长度为512~1518字节;其中数据长度(加载上层的协议数据)不超过1500字节。
葆宁
2019/04/18
3.7K0
Easy Tech:什么是I帧、P帧和B帧?
I帧、P帧和B帧(I-frames、P-frames and B-frames)的概念是视频压缩领域的基础。这三种帧类型在特定情况下用于提高编解码器的压缩效率、压缩流的视频质量,以及使得流去应对传输和存储时候的错误和故障。
LiveVideoStack
2021/09/23
3.5K0
Easy Tech:什么是I帧、P帧和B帧?
[TCP/IP] 数据链路层-ethereal 抓包分析数据帧
1.下载 http://dx1.pc0359.cn/soft/e/ethereal.rar
唯一Chat
2019/09/10
1.7K0
[TCP/IP] 数据链路层-ethereal 抓包分析数据帧
MMFlow :帧与帧之间的追光者
光流(Optical Flow),字面理解为“光的流动”,更准确的说法为:时变图像上的二维运动场,是视频数据的重要视觉线索,在动作识别、视频理解、视频分割、目标跟踪以及全景拼接等领域,都有广泛应用。
OpenMMLab 官方账号
2022/01/18
1.3K0
MMFlow :帧与帧之间的追光者
[android] 帧布局
/*******************2016年5月3日 更新**************************************/
唯一Chat
2019/09/10
7010
帧头
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
sofu456
2019/12/10
9190
点击加载更多

相似问题

Laravel mix.sass "prependData“不向scss文件提供数据

13

Webpack -导出SASS (.scss)文件

23

(Laravel)如何在webpack.mix.js中实现sass和tailwindcss

20

如何使用laravel-mix正确组合sass和less文件?

123

如何将sass和scss与webpack相结合?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文