首页
学习
活动
专区
圈层
工具
发布

数据库解耦,代码复用?还是数据库复用,代码解耦?

以上称之为解耦数据库一拆分就是解耦了。但是逻辑上来说原来在一起是有道理的,现在分开就是解除耦合了吗?有没有可能他本身就是要耦合的?问题来了很多长流程的业务,被切割成多个数据库。...至少我这20年数据库部署得到没发生过起不来的)有不少时候这些业务流程很紧密,别说分库了,即使是两个异构数据库,但是业务上是上下游的。在一个数据库性能不行时候,整体业务依然无法完成。爆炸半径依然是全局。...如果作为一个底层核心公共方法,应该把最核心最共用的提供给别人。然后这才是复用。但是我见到各行各业也是这样select * (这包含的最多有400多个字段)作为一个公共的。...如果说遇到问题,要解耦,你会发现根本解不开。最底层的是包罗万象的。一动影响全局。这就是典型的双标。在企业管理中,去申请权限一般来说,给一个最小的,然后逐步放开。...但是这个公共组件做的大而全,无法解耦。上来先运算100个。最后99%都是无用功。小结个人观点:代码应该解耦,数据库不应该。因为有时候用着用着数据就要发生联系了。

20010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    API 趋势:平台工程、解耦和AI的作用

    大解耦尚未达成普遍共识 尽管过去六个月来,Gartner、Kong 和其他行业专家在业内引起了轰动,但 API 管理的大解耦 理论仍然是一个有争议的话题。...“大解耦” 的理念侧重于从单一全套工具转向最佳的利基解决方案。...“Launch Any 的行业专家组成员兼 API 顾问 James Higginbotham 分享道:“我的许多客户都感到非常沮丧,因为没有一种简单的方法可以将所有这些工具整合在一起,所以这并不像有些人想象的那么容易...然而,另一位小组成员 Keith Casey 认为,解耦是对多年来幕后发生的事情的一种认可——它现在只是公开的。他指出,虽然许多公司声称已经标准化了一套工具,但实际上,例如微网关正在整个组织中部署。...投资采用 COE 方法的稳固平台团队意味着你正在投资适当的文档、支持、代码示例和其他资源,这些资源可以减少或完全消除这些对话。此外,这些资源还可以更好地使消费者能够开始使用你的 API。

    21710

    巧用NULL模式解耦依赖

    初始 应用A和应用B均用到了库libX.a中的类class A: ? 由于需求的变化,应用B需要库libM.a的能力,以便和服务M交互。...这个时候会产生一个问题,会导致应用A的Makefile也需要指定库libZ.a,否则编译时会报库libZ.a中的符号找不到错误。 需要一种方法来解除应用A对库libZ.a的依赖。 2. ...方法一:使用宏限定库libZ.a 这个方法要求类A全头文件方式,不能有.cpp文件,因为需要分别在编译应用A和应用B时选择性开启对库libZ.a的依赖。...这个方法虽然解决了问题,但是应用B得修改,需要增加打开宏的代码,其它有类似需求的应用均需要如此操作,涉及修改面比较大。 3. ...方法二:使用NULL模式 这种方法扩展性更好,新增其它的依赖也能应付,已有或不需要新特性的完全不需要修改,编译不受影响,不会被迫依赖libM.a。

    60030

    编程思想里面,何谓解耦?

    核心思想主要涉及到两个方面: 一、模块解耦:模块解耦指的是将系统分解为更小的、独立的模块或组件,每个模块负责一个明确定义的功能。...这其实本质就是模块解耦思想的体现。...(多module示例图) ​ 二、时间解耦:时间解耦指的是系统中的不同部分不应该过于依赖彼此的执行顺序。...我们也知道它的三大核心特性:异步、解耦、消峰。 这里的解耦指的就是时间维度上的解耦。 生产者压根不需要知道消费者应用的存在。它尽管只要往指定通道发送消息即可。消费者应用如果想要数据,订阅就好。...这里我们总结一下解耦的优势: 可维护性:当系统的一部分需要修改时,解耦使得只需修改与之相关的部分,而不影响其他部分,提高了代码的可维护性。

    1.3K10

    代码中的解耦思维

    解耦思维是一种设计和思考问题的方法,旨在将复杂的系统或问题拆分为独立的组件或子问题,以降低系统的耦合度和提高可扩展性。以下是一些关于解耦思维的要点: 1....可以使用事件、消息、API等方式进行模块间的通信。 通过应用解耦思维,可以将复杂问题分解为更小、更简单的子问题,并使得系统更易于理解、开发和维护。...解耦技术的演化 解耦的技术演化是一个持续发展的过程,随着软件开发和系统设计的不断进步,出现了许多技术和方法来实现解耦。以下是一些常见的解耦技术演化: 1. 接口和抽象类:接口和抽象类是实现解耦的基础。...应用架构中的解耦 在应用架构中,解耦是一种重要的设计原则,旨在降低不同组件之间的依赖关系,提高系统的灵活性、可扩展性和可维护性。以下是应用架构中常见的解耦方法: 1....每个服务都具有自己的数据库和业务逻辑,并通过定义清晰的接口进行通信。这种解耦设计使得每个服务可以独立开发、部署和扩展,提高了系统的灵活性和可维护性。

    1.3K10

    装饰者解耦的秘诀

    装饰者解耦的秘诀 组合优于继承原则是个很棒的想法,可以解决继承的地狱。 然而,几乎没有库、示例代码或者教程来教你如何在 Android 上实现这原则。 这里思考一下我们如何站在前人的肩膀上去做。...更多的是使用方法,我们需要站在他的肩膀上去思考这个问题,并做知识的内化。...image.png 为了使Decorator模式起作用,构建了四个类组件: Decorator class具有空方法。这些方法来自基类。他类似观察者。是用来扩展以添加功能的类。...3、自定义装饰者     看了这个库的原理之后,我们先简单的手写实现一下上面描述的装饰者模式。(然而分析之后发现这个库并不是典型意义上的装饰者)然后再研究一下自动化该如何做。...protected void onStop() { } protected void onDestroy() { } } 这里装饰器里面持有了被装饰者的实例,看样子并没有有效的解耦和

    1.1K40

    从单店到连锁:解耦方法的探索与实践

    大家觉得这个服务就是要把所有的商品能力都实现了,所以就会写出这样一个忙碌的消费者; 3、能力缺少复用 无论是编辑单个商品,还是批量编辑门店商品,逻辑上应该是一致的,但是我们却看到现在是两份代码,代码没有任何复用; 四、解耦方法的探索与实践...4.1 优化思路 基于以上分析,再结合一些常用的设计模式和原则,于是有了以下的优化思路: 1、开闭原则(OCP) 能不能让允许门店更新哪些属性,和商品通用编辑能力隔离、解耦,不互相干扰; 2、单一职责...带来的好处是: 1、代码解耦 比如门店能更新哪些商品属性,这个属于连锁能力,需求有调整时只需修改发布 mei-chain,不会修改 mei-goods,不影响单店逻辑; 2、部署隔离 就算 mei-chain...通过对连锁和单店的解耦,开发同学会自然的将连锁、单店的逻辑分开考虑,不耦合在一起,而开发同学在和产品同学的频繁接触过程中,会反过来去推动产品,也这样去思考问题。...五、总结 这篇文章主要介绍了连锁业务的痛点,并且分析了痛点的来源,以及通过结构化分析进行解耦的探索和实践,中间也穿插了一些自己对于架构设计、DDD、Serverless 的一些思考和看法。

    63730

    模块化与解耦(转)

    如果上面两种方法都不太合适,我们会在后面解耦里面讲到如何解耦。 *** 提升模块的复用度,自完备性有时候要优于代码复用。 *** 什么是自完备性,就是尽可能的依赖少的模块来达到代码可复用。...解耦与通信 我先说说为什么要解耦吧,模块化并不是说你把工程的代码拆分成 50 个 pod 或者framework就算完事了,要实现模块之间真正的解耦才算真正的模块化,否则如果模块之间还都是互相调用代码,...那么什么是模块间的解耦呢? *** 模块解耦的目标就是, 在基于模块设计原则上, 让模块之间没有循环依赖, 让业务模块之间解除依赖。...模块做出一些设计,添加一些注册型Api,修改JSBridge的服务为可以通过注册的方式添加逻辑,这样来实现与业务解耦,业务完全可以把与自己业务相关的代码放在自己的模块里面,然后通过你设计的Api注册到WebView...源码推荐 说了这么多,也要放点干货吧,下面给出2个库的介绍,对你模块化的进程希望有帮助。 1、** JLRoutes** 是一个URL跳转协议支持的库,跟我想要的简直很契合,强烈推荐。

    7.8K40

    Java后端开发——分层解耦详解

    标签:JavaWeb、三层架构、分层解耦、Spring、IOC、DI 一、三层架构 1.1 概述 为什么要采用三层架构? 遵循单一职责原则,便于代码复用和后期维护。...在程序设计和开发时,让每一个接口、类、方法的职责尽可能单一。 代码拆分为以下三层: controller :控制层,接收前端请求,处理请求并响应数据。...1.2 具体实现方法 在 service 和 dao 层中,通常会先定义接口(命名规范为对象名+Service/Dao),再用实现类(命名规范为接口名+Impl)去实现接口,最后通过调用方法进行业务设计...二、分层解耦 2.1 以往问题 直接用 new 创建对象,业务变更时需要频繁更换对象,导致各层级耦合度高,影响维护与扩展。 2.2 概念解释 耦合 :衡量软件各层/模块之间的依赖关联程度。...高内聚、低耦合的目标是提升程序模块的可重用性和移植性,因此需要解耦。 2.3 解耦思路 将项目中的类交由 IOC 容器管理(控制反转,IOC)。

    17210

    ICLR2020 | 解决长尾分布的解耦学习方法

    该论文通过设置一系列的实验,发现以下现象: 把训练过程解耦成了两部分:1)representations learning (即特征提取)和 2) classification 能够有效提高模型在长尾分布数据集上的性能...Classification 上一节总结了常用的学习特征的训练方法,这一节总结常用的训练分类器的方法。...论文中给出了3个decoupled learning的方法,分别是 NCM, cRT和 -norm。...上图可以看到除了Many-shot,这三个方法在其他3个类别上都比Joint训练模式表现更好 一个很有意思的实验结果是,在3个解耦学习的方法上,IB 采样策略训练得到的模型反而表现最好。...换句话说,如果我们使用解耦的训练方式,我们可能不用太花心思在数据采样上。 Figure 2 (左) 给出了不同训练模式下 classifier权重的norm值。

    1.9K20

    使用Spring Event解耦业务开发

    摘要: 使用Spring Event解耦业务开发 正文: 使用Spring Event解耦业务开发 事件驱动 事件驱动模型通常被理解为观察者模式或者发布-订阅模型 Spring 事件是观察者模式的一种体现...mobile); //送优惠券 sendCoupon(String userId); //送抽奖机会 sendLottery(String userId); //各种活动... send...(); 尽管我们方法抽象的很好...,但是当这种事件(注册后续操作)越来越多时,主方法就会显得很乱,并且随着业务需求的变化,这个维护起来也很麻烦 改进版 主流程 //注册 userMapper.saveUser(user); //发送注册成功事件...default) 监听会加入到主线程的事务中,可以通过Order来调整bean装配的优先级来实现监听的执行顺序 异步 需要配置线程池来实现,顺序无法保证 综上所述,Spring 事件主要还是对代码层面的解耦

    1.2K30

    使用队列解耦的架构方案

    为什么要使用队列解耦?...让我们来看看不使用队列的情况下如何解耦的: 原始需求 假设有一个商城系统,业务上划分为用户、订单、财务、消息、仓储几个模块(模块的划分实际上也是解耦设计的重要部分,但非这篇文章的关注点),这几个模块是分布式部署的...为了处理此类极端情况,可以采用的方案也有几个,比如: 将消息和下单放到一个数据库事务中,即使当时没能发送到队列,也能在检查未发送消息的时候补上这一条。...这种做法完全忽视了使用队列进行解耦的好处。...应该把发送到队列的数据看作一个消息、或者一个事件,而不是某个具体业务方需要的某几个数据,这个消息可能是和业务方需求的数据完全吻合,也可能少或者多,对于业务方需要的缺少的数据应该可以根据消息中某个标识去查询,这样才算比较合适的解耦

    1100
    领券