首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干净的架构-存储库是一个网关吗?如果是正确的,用例可以直接调用存储库吗?

干净的架构(Clean Architecture)是一种软件设计原则,旨在实现可维护、可测试和可扩展的应用程序架构。它将应用程序分为不同的层级,每个层级都有特定的职责和依赖关系。

存储库(Repository)是干净的架构中的一个重要组件,用于处理数据的持久化和访问。存储库充当了应用程序与数据源(如数据库、文件系统等)之间的中间层,通过封装数据访问逻辑,使得其他层级的组件可以独立于具体的数据存储实现。

从概念上来说,存储库可以被视为一个网关,因为它提供了应用程序与数据源之间的接口。它负责处理数据的读取、写入和查询等操作,并将结果返回给调用方。

在干净的架构中,用例(Use Case)是应用程序的核心业务逻辑。用例通过与存储库进行交互来实现对数据的操作。用例可以直接调用存储库,以便获取所需的数据或将数据持久化到数据源中。

因此,根据干净的架构的原则,用例可以直接调用存储库。这种设计方式使得用例与具体的数据存储实现解耦,提高了代码的可测试性和可维护性。

对于腾讯云相关产品,推荐使用腾讯云的云数据库 TencentDB(https://cloud.tencent.com/product/cdb)作为存储库的实现。腾讯云的云数据库提供了高可用、可扩展和安全的数据库服务,适用于各种应用场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何运用领域驱动设计 - 存储

目录 概述 直接看东西 被广泛使用仓储 仓储反模式 什么存储 如何运用存储 存储为聚合提供操作 存储对外提供哪些方法 存储一个明确约定 审计追踪 汇总 不要使用过多特性干扰您领域对象...我们现在使用方式正确?它在领域驱动设计中又扮演着怎样角色呢?...还记得在上一篇文章 如何运用领域驱动设计 - 聚合 中,我们不止一次提到了仓储这个概念,因为它是为聚合而服务,而随着领域深入,使得领域模型越来越复杂时候,存储将慢慢变成模型扩展,它将描述您每一个检索聚合意图...Repository提供了一个增删改查操作,它抽象了数据访问部分。是的,这个理解正确,因为这是存储很重要特性。...而此时,就可以依赖我们存储来完成了,当聚合根在领域服务或者领域中已经完成了操作时,将它传递给存储持久化之前就可以存储为它加上审计信息。

98030

黄文俊:Serverless小程序后端技术分享

,其他服务都可以直接在线服务,这些服务直接通过代码调用。...它本身也能够提供api发布和版本切换能力,api网关之后就是云函数。云函数就是实际处理业务逻辑,如果你需要使用数据,就在代码内发数据连接,需要存储文件,就调用相应窗口写文件。...我们现在要展示一个案例,也就是怎么把中间开发者服务器替换掉,Serverless方案落地,我们使用了api网关加云数据实现开发者服务器所能够做到事情,不需要购买服务器而落地我们api。...image.png api网关 我们看一下api网关事情,它对外以一个api接口呈现出来,我们直接提供了对外访问域名,用户基于这个域名绑定自己所拥有的域名,这种情况下可以实现发布要求,微信小程序开发者要求域名要备案...A:可以从一些限制可以看到,现在对于微信小程序大小有限制,它本身大小要求,目前我记得5兆包2兆包大小,如果是上千个,对于你手机来说可能存储了一些数据,每个包最大用满可能就是5兆,本身小程序页面的加载都是有限制

4.2K141
  • 前端领域干净架构

    大家好,我 ConardLi,前端有架构?这可能很多人心里疑惑,因为在实际业务开发里我们很少为前端去设计标准规范代码架构,可能更多去关注工程化、目录层级、以及业务代码实现。...干净架构可以帮助我们实现这一目标。 什么干净架构干净架构一种根据应用程序领域(domain)相似程度来拆分职责和功能方法。 领域(domain)由真实世界抽象而来程序模型。...像任何其他工具一样,干净架构除了好处之外还会带来额外成本。 需要更多时间 首先是时间,设计、实现都需要更多时间,因为直接调用第三方服务总是比写适配器简单。...产物越大,浏览器下载和解释时间越长,所以代码量一定要把控好,适当删减代码: 将用描述得更简单一些; 直接从适配器和领域交互,绕过; 进行代码拆分 如何降低这些成本 你可以通过适当偷工减料和牺牲架构...相互依赖 第二个问题相关,通过一个事件触发另一个。 我知道并且对我有帮助处理这个问题唯一方法将用分解为更小原子。它们将更容易组合在一起。

    1.3K20

    百度 提前批C++ 一面 二面 三面

    这个我说信号量,他说如果信号量来解决,现在出现一个状况,两段进程都被标记为可以访问该共享数据,但我们共享单元只能支撑一个进程访问。这时候怎么办? 我说唯一标识符去处理。...在存储层回答ceph 分布式存储组件时候 被问到了映射  为什么ceph要去做三层映射? 面试官: 你有没有考虑过流量不干净情况怎么办?...比如相同IP地址我们可以从频率上去限制他请求。不同IP地址 我们可以去从key(这个key 一个失效期,只能用一次,我们将这些不干净流量尽量拦截在接入层,不让他进入我们网关。)...都可能有被攻破风险。而access_token实时生成。 面试官: 咱们又绕回来了,那你做这个第三方代理时候为什么数据?...还是刚才,那咱们现在假设我们服务端和数据原则上安全,那么现在还是要用access_token去换取?我现在可以直接把appid和appsecret直接串起来串成一个字符串然后md5加密一下。

    1K30

    后端Coder如何做好代码设计?

    其次再考虑,如果是新起项目,要如何搭建整体实施方案,内容一般包括: 硬件部署与资源申请:硬件和资源,要和业务需求结合来制定,比如业务最大访问、TPS/QPS等,要切实讨论得出一个数据范围,以确定系统是否做高并发方案...数据一般结合领域模型设计,领域模型持久化存储映射转化(ORMapping)。...API调用方一般会考虑给展示层多端调用(web、mobile等),还要考虑相同API是否可以给其它系统模块使用,最后一层设计,是否相同API对外提供openAPI服务。...如果开放给前端query服务提供给开放平台直接使用或包装后直接访问,则容易出现场景,每次调用查询不确定分页,很有可能一个大分页(如十万)就打到DB上,这样即使索引匹配也容易造成数据缓存区拥堵。...这里面有3个图可以辅助设计: 1、如果一个API复杂度较高,调用链路上涉及对象较多,可以使用时序图来表达并且明确各调用环节输入与输出,以反映对象间交互与协作关系。

    80030

    什么无服务器架构

    这里以“搜索”为,搜索功能可以从持续运行服务端中拆分出来,以 FaaS 方式实现,从 API 网关(后文做详细解释)接收请求返回响应。...您可以将您代码设置为自动从其他 AWS 服务(5)触发,或者直接从任何 Web 或移动应用程序(6)调用。...API 网关一个配置了路由 HTTP 服务器,每个路由对应一个 FaaS 函数,当 API 网关收到请求时它找到匹配请求路由,调用相应 FaaS 函数。...Apex 有意思一点它允许你 AWS 平台并不直接支持语言来实现 Lambda 函数,比如 Go。...有很多存储过程给我们教训可以放在 FaaS 场景下重新审视,存储过程问题在于: 通常依赖于服务商指定语言,或者至少指定语言框架/扩展 因为必须在数据环境中执行所以很难测试 难以进行版本控制,

    4.4K40

    被吹得天花乱坠无服务器架构究竟是什么鬼?

    这里以“搜索”为,搜索功能可以从持续运行服务端中拆分出来,以 FaaS 方式实现,从 API 网关(后文做详细解释)接收请求返回响应。...您可以将您代码设置为自动从其他 AWS 服务(5)触发,或者直接从任何 Web 或移动应用程序(6)调用。...API 网关一个配置了路由 HTTP 服务器,每个路由对应一个 FaaS 函数,当 API 网关收到请求时它找到匹配请求路由,调用相应 FaaS 函数。...Apex 有意思一点它允许你 AWS 平台并不直接支持语言来实现 Lambda 函数,比如 Go。...有很多存储过程给我们教训可以放在 FaaS 场景下重新审视,存储过程问题在于: 通常依赖于服务商指定语言,或者至少指定语言框架/扩展 因为必须在数据环境中执行所以很难测试 难以进行版本控制,

    1.3K40

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    ViewModel 类开发了一个简单来保存配置更改过程中篮球分数。...简而言之,你可以混合混合 ViewModels、 onSaveInstanceState()、本地持久化一起使用。 ViewModel Loader 一个替代品?...这两种情形都假设用户永久退出了这个 activity,如果重新进入那个 activity,他们所期望一个干净页面。...不过,在这两种场景中,你仍需要一个 ViewModel 来避免因配置更改而重新从数据中加载数据导致资源浪费。 ViewModel Loader 一个替代品?...他们为应用其他部分提供了一套干净 API。当数据更新时他们知道从哪里获取数据以及调用哪个 API。你可以把他们当做不同数据源(持久模型、web service、缓存等)之间协调员。”

    3.8K30

    2021年突破年薪百万难关!吃透这套Java真题合集

    21、为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法? 22、什么 Callable 和 Future?...servlet 线程安全? 47、线程类构造方法、静态块被哪个线程调用 48、什么线程同步和线程互斥,有哪几种实现方式? 49、一个线程运行时发生异常会怎样?...8、代理对象创建 9、代理对象调用目标方法 Spring mvc面试题 1、Spring MVC控制器是不是单模式,如果是,有什么问题,怎么解决? 2、什么Spring MVC?...同一个服务多个注册情况下可以直连某一个服务? Dubbo 服务降级,失败重试怎么做? 38.Dubbo 使用过程中都遇到了些什么问题?...19、 DiscoveryClient作用 20、 什么Spring Cloud Zuul(服务网关) 21、 Eureka怎么实现高可用 22、 网关与过滤器有什么区别 23、 既然Nginx可以实现网关

    77500

    面试JAVA常被问到问题(持续更新中)

    前者数据需要进行额外操作发现如何对返回行排序,后者MYSQL需要创建一个临时表来存储结果,这通常发生在对不同列集进行ORDER BY上,而不是GROUP BY上 9,能讲讲写SQL时候一些注意事项...tomcat为每30分钟清理一次; Cookies默认age为-1,可以修改持久化到本地文件,可以存数据。...堆被所有线程共享,在JVM中只有一个堆。 栈:Java栈中存放一个栈帧,每个栈帧对应一个调用方法。 方法区:与堆一样,被线程共享区域。...解决办法: 1、对于id<=0请求直接拦截; 2、对不存在缓存可以设置一个其值等于null,然后过期时间设置30秒。...finalize :一个方法,当我们调用Systemgc()方法时候,由垃圾回收器调用finalize(),回收垃圾。 51,try-catch-finally 中哪个部分可以省略?

    62910

    当金融风控遇上人工智能,众安金融实时特征平台实践

    实时特征平台业务架构图片这张图我们实时特征平台业务架构图,可以看到图底层特征数据源层,中间层实时特征平台核心功能层,上层整个特征平台体系业务应用层,特征平台主要有四个数据源:(1)征信数据网关...对于不同数据,我们也会考虑不同存储引擎,业务交易数据主要是 TableStore 作为存储引擎,用户行为特征数据使用 Redis 为主,用户关系图谱数据图数据进行存储,从整个流程来看,现在数据体系采用成熟...实时特征平台系统架构图片我们实时特征平台架构基本如上图,上游业务经过特征网关进行特征查询,特征网关会进行特征查询权限验证,限流控制和特征查询任务异步分发,特征网关首先根据特征元数据信息路由到不同特征数据源...(XFlow)上报到 Kafka,这些数据也会使用 Flink 进行实时加工计算,不过和实时业务特征处理区别是反欺诈特征在实时数仓里面直接计算好之后存储到 Redis,图数据存储里面,这个是为了满足反欺诈特征查询高性能要求...Q5:贵司大量依赖图性能实时计算反欺诈变量,那目前性能存在瓶颈?A5:主要取决于图社群图关系数据量,如果是查询普通用户,整个用户节点不会有太多,基本上会在十个节点以内。

    65400

    ViewModel:持久化、onSaveInstanceState()、UI 状态恢复和 Loader

    我在上篇博文中用新 ViewModel 类开发了一个简单来保存配置更改过程中篮球分数。ViewModel 被设计用来以与生命周期相关方式保存和管理 UI 相关数据。...ViewModel 类开发了一个简单来保存配置更改过程中篮球分数。...在本地存储中持久化复杂对象,在 onSaveInstanceState() 中为这些对象存储唯一 ID,而不是直接存储复杂对象。 举例: 最近搜索查询。...不过,在这两种场景中,你仍需要一个 ViewModel 来避免因配置更改而重新从数据中加载数据导致资源浪费。 ViewModel Loader 一个替代品?...他们为应用其他部分提供了一套干净 API。当数据更新时他们知道从哪里获取数据以及调用哪个 API。你可以把他们当做不同数据源(持久模型、web service、缓存等)之间协调员。”

    1K20

    单体分层应用架构剖析

    这个特点上下文分层之间依赖于抽象,而非依赖于具体。当实现发生变化而接口契约不变时,变更范围框定在当前层。但,如果是接口契约变更,则可能会直接影响到上游依赖层。...其特点: 引入通用服务层提供通用服务,提高复用性 通用服务层开放层,允许调用链路穿透,业务层可以按需直接访问更下层持久层 图2.五层架构示意 相比于四层架构,五层分层架构主要优势:通过中间层引入一定程度解决系统复用性问题...其二:如果允许跨层调用,则意味着 “模型” 穿透,低层模型会直接暴露在更上层,这与我们追求组件内聚性和模型封装性存在冲突 注:层间依赖约束一种架构决策,可以考虑通过自动化单元测试机制进行保证...如果是展现层需要增加一个字段,而当前数据模型中没有? 如果是数据中需要增加一个字段,而展现层和业务逻辑层不关心? 如果是.........而对于非常核心业务概念,比如以订单为,在单体分层架构下需要回答这样一个问题:“订单组件” 在哪里?

    31020

    架构物联网:一种新解决方案

    一般情况下,网关会将设备所传输任何硬件与供应商特定协议转化为一致而更易集成东西,方便在集成时使用,类似TCP和任何顶端标准化信息协议之类。 一直只有一个网关?这个网关只使用硬件特定协议?...可以说微服务就像是干细胞。微服务与干细胞一样,根据所使用地方以及用法来发挥具体功用。 概念 我们为什么会认为自己解决方案“正确”呢? 首先,我们希望覆盖所有级别的抽象。...我们有物联网架构所有层面的组件与开发工具。将传感器与Arduino相连很有趣,但下一步是什么呢?如何整合才能存储大数据并执行分析呢? 其次,我们开放,依靠现有标准,只是协助集成现有的解决方案。...因此在你公司里,这些结构模块任何一个都可能已经存在了,而且能够很容易地转换或直接按照微服务部署。...此外,一个完整系统肯定应当包含以业务流程与规则形式存在高级业务逻辑。为此,JBoss业务流程管理系统来集成也是可行。 应用架构如下图,点击查看源代码: ?

    1.4K90

    微服务体系结构——学习、构建和部署应用程序

    还没有微服务/微服务体系结构正确定义,但是您可以说,它是一个由执行不同操作小型、单独部署服务组成框架。...然后,请求通过定义良好API网关与内部服务通信。 3. API 网关(Gateway) 由于客户端不直接调用服务,因此API网关作为客户端向适当微服务提出请求入口点。...静态内容 在微服务内部进行通信之后,它们将静态内容部署到基于云存储服务,该服务可以通过内容交付网络(CDNs)将其直接交付给客户端。...Uber 样学习 Uber's 之前架构设计 与许多初创公司一样,优步起步之路也是建立在单一城市单一服务基础上。当时,拥有一个代码似乎很干净,解决了优步核心业务问题。...以下一些突出挑战 1、所有的功能都必须重新构建、部署和反复测试才能更新单个功能点。 2、在一个存储中修复bug变得极其困难,因为开发人员必须一次又一次地修改代码。

    52950

    字节跳动内部Java技术岗‘面试真题’泄露,冒死发布!

    有什么? 20、Java 中堆和栈有什么不同? 21、 为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?...15、如果在一个分片(shard)停止或者很慢时候,我发起一个查询会怎样? 16、你说NoSQL数据是什么意思?NoSQL与RDBMS直接有什么区别?为什么要使用和不使用NoSQL数据?...32、MongoDB支持存储过程?如果支持的话,怎么? 33、我必须调用getLastError来确保写操作生效了么? II.MySQL [q18ckhkkfc.png?...或 INSERT 语句 9、在 Join 表时候使用相当类型,并将其索引 10、使用 ENUM 而不是 VARCHAR 11、千万不要 ORDER BY RAND() 12、 选择正确存储引擎...32、@RequestMapping注解作用? 33、SpringMvc 控制器是不是单模式,如果是,有什么问题,怎么解决?

    1.2K103

    腾讯云数据TDSQL精英挑战赛--Q&A

    初赛和决赛不同性质题目?需要提前做什么准备? A:本次大赛主要聚焦在数据迁移方向,初赛、决赛赛题一个方向,进阶性质,每个赛段考察点不同。赛前可以提前了解关于数据迁移相关知识。...Q:1、最终是要实现一个中间件负责数据迁移到TDSQL,还是实现一个类TDSQL本身也进行存储?2、比赛TDSQLinnodb还是ydstore sharedkey hash算法是什么?...本地代码可以自己计算么?透传sql方式链接怎么做?直接前面加注释? A:关于赛题、数据、评测等详情,敬请期待2021年12月16日【腾讯云+社区】云+竞赛平台上赛题发布。...如果是三个分片,三个分片和一个分片使用或者存储区别是什么? A:TDSQL会自动分库分表,一个分片存储一张表做水平拆分后一部分数据,如果有三个分片,那么每个分片就存储三分之一数据。...A:如果是同城多中心,数据一致性通过MySQL同步保证。如果跨城容灾的话,需要走跨实例异步容灾方式。 Q:可以允许全局group by操作

    6.1K240

    微服务平台之网关架构与应用

    前言: API 网关出现原因微服务架构出现,不同微服务一般会有不同网络地址,而外部客户端可能需要调用多个服务接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下问题: 1、...也就是说,网关角色作为一个 API 架构,用来保护、增强和控制对于 API 服务访问。...有集群? 答:GateWay也可以实现负载均衡能力通过服务注册中心服务名/接口实现负载均衡能力。 问4:微服务是否一个系统部署一个网关?...答:在goveror系统中,一个系统只能部署一个网关,但是网关可以有多个实例(可以理解成集群部署)。 问5:EOS 8基于spring cloud gateway 开发?...如果是什么版本? 答:EOS基于spring cloud gateway 2.12版本上开发。 问6:如何保证网关高可靠性?

    1.7K20

    阐释限界上下文

    赶紧翻书——谢天谢地,书里内容还好正确(use case)对一系列活动(包括活动变体)描述;主体(subject)执行并产生可观察有价值结果,并将结果返回给参与者(actor)。...团队根据菱形对称架构编写代码时,一个基本检查手段就是询问:我写代码与领域逻辑有关如果是,就放在内部领域层;如果非,就放在外部网关层。进行代码评审时,也可通过这一判断标准进行检查。...北向网关定义调用顺序由外向内依次为远程服务调用本地服务,本地服务调用领域层。...同时,它也可以和分层架构映射起来,如下图所示: 南向网关扩大了防腐层(ACL)外延,从限界上下文代码模型边界来看,不止上游限界上下文,诸如数据、文件、外部平台、消息队列都是它要防止腐化内容。...为此,我将访问数据抽象Repository放到了南向网关端口层,与访问上游限界上下文Client位于同等地位。对应领域驱动设计分层架构,南向网关就是基础设施层。

    56110

    谁能想到,我给技术总监“上了一课”

    单体服务 我记得在我实习时候就是单体服务,那个时候架构很简单,前后端分离都还没有,直接 JSP+Java 实现一套项目,整个流程相当简单,就连 Nginx 都没有用到。...同事 C: Spring Cloud 专注于提供良好开箱即用经验典型和可扩展性机制覆盖 分布式/版本化配置 服务注册和发现 路由 Service-to-Service 调用 负载均衡 断路器 分布式消息传递...如果按照上面的架构图,直接去数据获取就可以了,因为服务虽然独立了,但是数据还是共享,所以直接查询数据就能得到结果,如果我们将数据也拆分了呢?这个时候我们该怎么办呢?...同事 B:我觉得我们可以使用网关,它既可以做分流转发,也可以做权限控制,使用 Nginx+网关,我觉得比较好一种方案,以下网关 Zuul 介绍。 路由在微服务体系结构一个组成部分。...网关经过权限校验、然后分别转发到对应服务中,每个服务都有自己独立数据,如果需要跨查询时候就需要用到分布式远程调用(Feign)。

    43930
    领券