做业务不要先考虑“解耦“,而是要先满足业务流程。即你的程序的结构应该是一个个纵向的业务流,从controller到最后的数据存储。不同的业务流不会相互干扰。

等到你做了很多个业务流后,再去尝试辨识哪些地方有可能是能公用的,再去尝试去复用。公用的前提是这块代码几乎很少改

这块代码有比较合理的业务抽象 —— 即从人类直觉上这给地方抽出来也是说得通的

就算这块代码要改。他的改动对其他依赖造成的影响总是符合常识的,而不是会引发一大堆问题

如果得不到这样的特性,即使代码看起来有相似之处,也不要去抽。错误的抽象才是代码维护的大敌。一旦做了,你根本控制不了你的修改的影响范围和影响程度。

题主对解耦的理解也有偏颇。从题目上看,似乎“逻辑不写一起“就解耦了,而写在一起就耦合。实际上并不是这样的。不要认为任何业务逻辑可以做任何细粒度的拆解。从业务角度,一个业务是一个“步骤的集合”。总会有第一步干什么,第二步干什么,等等。很多时候,这些步骤写一起才更容易看懂,更容易修改和维护。

更精细的区分,一个业务的逻辑大概可以分为两类:业务直接相关的主逻辑。比如你要实现下单买东西,那么创建订单、扣款是主逻辑。这些逻辑必须要写到一起,而且往往用同一个事务包起来保证一致性。如果主逻辑非常复杂,就尝试用多个层级来拆解这些流程,但他们还是在一起。

业务辅助相关的逻辑。比如更新计数、更新ES的搜索数据、发一个业务统计log等。这些内容可以不要掺合到主逻辑中。可以用AOP,事件队列(单机的/分布式的)的形式来解耦。

但解耦是有前提的。事实上解耦会让系统结构更复杂了。比如一个业务接口调用完了,计数却没有增加,或者晚了很久才增加。要调查问题,就需要系统监控等做的相当到位。团队的相关模块负责人可以有办法来精确的管理跨系统的数据流,能快速定位错误原因。

同时,你的产品设计也可能需要跟着更改。比如计数可能因为最终一致性而暂时不准,会引起用户的困惑。这时候产品设计上可能需要一个临时的“假的,但是符合用户直觉“的计数,或者以各种方式隐藏计数等措施来对产品做调整。

解耦不是写业务代码的最终目标,用可以接受的性价比进行业务开发和代码维护才是。如果你的team里没有那么多人来各自负责独立的模块,也没有很好的INFRA支持,而是很少数几个人处理所有逻辑,那整体看下来还不如把代码都写一起。

java 分层处理解耦_后端分层架构如何解耦?相关推荐

  1. java 模块解耦_微服务架构:如何用十步解耦你的系统?

    导言: 耦合性,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包括控制关系.调用关系.数据传递关系.模块 ...

  2. java 框架漏洞网站_在分层架构下寻找java web漏洞

    web开发应用程序(网站),是目前应用最广泛的程序.但是开发者的水平参差不齐,导致了各种各样web漏洞的出现.本文站在分层架构的角度,分析一下如何在java web程序中找到可能出现的种种漏洞. 本文 ...

  3. Java并发编程实战_一线大厂架构师整理:java并发编程实践教程

    并发编程是Java语言的重要特性之一, 在Java平台上提供了许多基本的并发功能来辅助开发多线程应用程序.然而,这些相对底层的并发功能与上层应用程序的并发语义之间并不存在一种简单而直观的映射关系.因此 ...

  4. html访问java接口出现缓存_高可用架构设计(3) -电商商品详情页缓存背景及框架说明...

    Github 0 导读 我们这个教程,基于hystrix,如何来构建高可用的分布式系统的架构,项目实战 模拟真实业务的这么一个小型的项目,来全程贯穿,用这个项目中的业务场景去一个一个的讲解hystri ...

  5. java 耦合解耦_程序的耦合和解耦

    程序的耦合和解耦 耦合 指的是程序间的依赖关系,包括类之间的依赖和方法间的依赖 解耦 降低程序间的依赖关系,实际开发中应该做到编译器不依赖,运行时才依赖 解耦的思路 使用反射来创建对象,而避免使用ne ...

  6. java接收json数组_后端如何接收json数组

    如何接受json数组 这里用到了Hutool的java工具类库,这是类库地址:www.hutool.cn/docs/#/,有需要的可以自己参考文档集成到自己的项目里,比较方便,种类也比较齐全. 使用J ...

  7. java后台环境搭建_后端-java环境搭建

    java环境搭建 开发工具:idea/eclipse/myeclipse + mysql/oracle/sqlserver/postgresql + tomcat6/7/8/9. 下面以eclipse ...

  8. go与Java微服务对比_微服务架构对比-Go语言中文社区

    最近使用Docker+SpringCloud来代替Zookper+Dobbo来做微服务,总结如下 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技 ...

  9. java 什么是耦合_什么是耦合、解耦

    什么是耦合.解耦 一.耦合 1.耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象. 2.在软件工程中,对象之间的耦合度就是对象之间的依赖性.对象之间的耦合越高,维护 ...

最新文章

  1. JAVE EE 企业级开发之从零开始学JAVA【51CTO技术论坛】
  2. mysql索引数据结构图解_深入理解Mysql索引底层数据结构与算法
  3. ASP.NET MVC Model绑定(四)
  4. String 重载 + 原理分析
  5. 1.1 决策树算法原理
  6. swift版 二分查找 (折半查找)
  7. 旅游中用稳定器和相机拍视频是怎样的体验?
  8. odp.net连接oracle9i 出错解决_交换机常见故障及解决方法
  9. java中什么是抽象类(abstract)
  10. window7DOS常用命令
  11. 浅谈Johnson算法
  12. 【day13】【洛谷算法题】-P5713洛谷团队系统-刷题反思集[入门2分支结构]
  13. 计算机网络初探(ip协议)
  14. 【递归入门】走迷宫(c++)
  15. linux删除序号2的文件,Linux使用rm-rf删除了重要文件?不要慌,我们有恢复神器!-rm文件...
  16. 【练习/Python】监测汇率脚本
  17. 【经验贴】用最土的手法,最高调的绕过反爬
  18. LattePanda入手笔记
  19. IC工程师入门必学《Verilog超详细教程》(附下载)
  20. 【短视频运营】账号定位 ( 擅长方向 | 利他性 | 变项方向 | 赛道现状 | 账号成本 | 账号领域垂直 )

热门文章

  1. 微信最新防封技术,域名防红技术分析
  2. 输入年份判断是否为闰年
  3. 掌握IDEA的这两款插件,写“破解补丁”分分钟
  4. openGL控制FPS (每秒传输的帧数)
  5. Tga图片格式分析以及程序实现
  6. 微信公众号JS-SDK多图上传爬坑指南
  7. 家庭教师服务器维护,成立首家“家庭教师服务中心”
  8. CSS语义-icont+text
  9. Excel 删除数据temp 恢复
  10. 飞鱼CRM是什么?巨量引擎线索如何自动同步至CRM系统