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

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

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

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

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

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

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

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

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

相关·内容

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

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

98530

黄文俊: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复杂度较高,调用链路上的涉及对象较多,可以使用时序图来表达并且明确各调用环节的输入与输出,以反映对象间的交互与协作关系。

    80830

    什么是无服务器架构?

    这里以“搜索”为例,搜索功能可以从持续运行的服务端中拆分出来,以 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

    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可以实现网关

    78300

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

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

    3.8K30

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

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

    63310

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

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

    69900

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

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

    1K20

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

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

    1.4K90

    单体分层应用架构剖析

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

    34620

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

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

    54150

    字节跳动内部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、比赛用的TDSQL是innodb还是ydstore sharedkey hash算法是什么?...本地代码可以自己计算么?透传sql方式用链接库怎么做?直接前面加注释? A:关于赛题、数据、评测等详情,敬请期待2021年12月16日【腾讯云+社区】云+竞赛平台上的赛题发布。...如果是三个分片,三个分片和一个分片使用或者存储上的区别是什么? A:TDSQL会自动分库分表,一个分片存储一张表做水平拆分后的一部分数据,如果有三个分片,那么每个分片就存储三分之一的数据。...A:如果是同城多中心,数据的一致性是通过MySQL的同步保证的。如果跨城容灾的话,需要走跨实例的异步容灾方式。 Q:可以允许全局group by操作吗?

    6.2K240

    阐释限界上下文

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

    58310

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

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

    1.7K20

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

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

    44530
    领券