这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 EBI 架构(Entity-Boundary-Interactor,实体-边界-交互器)架构因为 Robert C. Martin 关于整洁架构(我会 […]
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 EBI 架构(Entity-Boundary-Interactor,实体-边界-交互器)架构因为 Robert C. Martin 关于整洁架构(我会 […]
问题背景 Lombok使⽤ 同时使⽤@Data和@Builder ,构建无参构造器报错!编译不通过。如下图: 图片 Lombok @Data和@Builder分别单独分析用法 Lombok使⽤@Data可以⽣成⽆参构造和类⾥⾯所有属性的getter/setter⽅法。可以简化我们代码的开发。(需要安装Lombok插件和引⼊Lombok依赖)。 例如下⾯的⼀个实体类,引⼊Lo […]
在软件工程中,术语管理是一个极其冷门但是却非常重要的话题。 在很多项目上开发人员和业务人员之间的讨论有很大一部分是词汇的误解造成的,即使在技术人员、业务人员内部讨论也存在同样的情况。例如,某电信运营商项目,话费套餐属于商品还是产品这个问题经常被拿出来讨论,直到找到了总部给出的规范性文件才定性下来。 越是专业的软件系统对专业术语的定义需求越发迫切,这些定义往往需要极其精确,甚 […]
在金融、保险、电商等涉及金额计算的领域,常常需要高精度计算。但是由于计算机原理受限,普遍存在精度丢失问题。 例如,使用 JavaScript 在浏览器控制台输入: (0.1+0.2) == 0.3 我们会得到一个 false 的计算结果。 如果使用编程语言原生的计算方法会遇到大量精度问题。一般来说,我们可以优先考虑使用整数计算,例如在电商领域为了简单往往以分为单位计算金额。 […]
在 Java 项目中,对象转换是一个比较繁琐的工作,常见的转换场景有: 页面请求对象(Use Case Command)转领域模型实体(Entity)。 领域模型转换为数据库操作对象(PO)。 领域模块转返回给前端的结果对象(Use Case Response)。 …… 这些对象统称为 POJOs,也就是 Plan Object Java Object 的缩写。 这一期的系 […]
了解 Eclipse MAT 中 incoming and outgoing 引用之间的区别。 Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。它具有几个非常有效分析内存问题的强大功能。“Incoming references”和“Outgoing references”就是其中一种功能。在本文中,我们来探讨 Incoming refe […]
有没有想过 Shallow 和 Retained heap 之间的区别? Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。当尝试分析内存相关的问题时,它非常方便。在 Eclipse MAT 内存分析的报告中会显示对象两种类型的 Heap 信息: Shallow Heap Retained Heap 在本文中,我们主要讨论它们之间的区别, […]
在应用系统中,使用缓存不算非常难的事,但是设计好一套缓存策略比较麻烦,这样既能起到好的缓存效果也能在合适的时候更新缓存。 今天我们聊聊缓存。 不过,在计算机科学中,有很多种缓存。我们先聊聊缓存的类型,再谈应用系统中的缓存。 我们会涉及哪些缓存知识? 这里我把缓存分为两类: 非应用缓存:难以被程序员干预、控制和使用的缓存,但是我们能通过选择合适的数据结构,写出缓存友好的代码。 […]
大家好,我是技术UP主小傅哥。MVC讲解了,DDD讲解了。接下来这个章节,我们讲讲从MVC到DDD的重构! MVC 旧工程腐化严重,迭代成本太高。DDD 新工程全部重构,步子扯的太大。 这是现阶段在工程体系化治理中,我们所面临的最大问题;既想运用 DDD 的思想循序渐进重构现有工程,又想不破坏原有的工程体系结构以保持新需求的承接效率。 经过实践得知,DDD 架构能解决, […]
笔者在一线互联网公司,经历过数次大型系统的重构项目,也多次担任技术负责人,经历的重构项目包含:日吞吐量数万亿的计算型系统、基础架构中间件系统、高并发高稳定性要求的C端系统、业务复杂性较高的B端系统等。 同时了解到大型重构项目风险高、难度大、易流产,因此总结了本文供大家参考学习交流。 任何系统在持续的演进迭代的历程中,都难免因各类因素导致迈向重构,比如:系统可塑性与业务需求无 […]
限流是一种控制访问速率的策略,用于限制系统、服务或API接口的请求频率或数量。它的目的是为了保护系统免受过多请求的影响,防止系统因过载而崩溃或变得不可用。限流是一种重要的性能优化和资源保护机制。 限流的好处有以下几个: 保护系统稳定性:如果系统接受太多请求,超出了其处理能力,可能导致系统崩溃或响应时间急剧增加,从而影响用户体验。限流可以帮助控制请求速率,确保系统稳定运行。 […]
互联网时代越来越多的实时协作软件出现,例如在线点餐、文档编辑、在线绘图等。 今天来聊聊这些场景一般如何实现的。 场景和问题 实时协作软件一般用于多个人同时操作(也包括一个人多个会话)。例如 Google Doc 可以支持同时编辑文档,并将多人编辑的结果合并到一起展示,而且能相互看到其它人的操作。 但是,在实现过程中会有非常多的技术问题和业务逻辑问题需要考虑: Web 平台如 […]
大部分程序员都会遇到过类似的 Bug:用户创建或者更新的数据在查询时偏移了 8 个小时。 我们有时候会在网上找一些文章,胡乱的配置后问题修复了,但是过一段时间后往往又会出现。 时间和时区的问题往往就像幽灵一样发生在程序员身上。 这一期的系统设计话题我们来盘点一下时间的问题,澄清相关的概念,以及相关的解决方案。 生活中的时间和时区 古人尸佼说,天地四方曰宇,往古来今曰宙,其中 […]
这个话题来自网友提交和项目上真实的案例,即如何实现企业内部多个应用之间的数据交换。 这个话题非常实用,我们先从问题开始聊起(在很多系统设计的过程中,我们发现问题比答案有时候更有价值,因为问题贴合业务价值)。 问题 案例 1 业务和推荐系统集成 假设有两个系统,分别是 A 系统和 B 系统。A 系统是一个事务处理系统,而 B 系统则是一个算法和推荐系统。A 系统向 B 系统提 […]
在上一部分,分层架构的目的是为了将业务规则剥离出来在单独的领域层中进行实现。再回顾一下领域驱动设计的分层中应用层代码的实现。 @Override public void pay(int orderId, float amount) { DesignerOrder order = designerOrderRepository.selectByKey(orderId); // […]
BeanUtils (1) BigDecimal (1) CDC (1) ETL (1) github (1) heap (1) LLaMa (1) MAT (5) MDM (1) Sora (1) TCP (1) 业务图 (1) 企业应用 (1) 停机迁移 (1) 内存泄露 (4) 协议 (1) 可用性 (1) 基础设施层 (1) 堆内存 (1) 堆外存 (1) 大事记 (1) 实时协作 (1) 对象转换 (1) 应用架构 (1) 异常 (3) 技术规范 (1) 技术选型 (4) 提示工程 (1) 数据交换 (1) 数据共享 (1) 数据双写 (1) 日期 (1) 时间 (1) 时间线 (1) 术语 (1) 架构方案 (14) 流程图 (1) 精度 (1) 线程模型 (1) 经验分享 (1) 网络编程 (2) 解耦 (1) 软件复杂性 (1) 软件工程 (1) 重构 (4) 重试 (1) 隔离级别 (1) 集群扩容 (1) 领域层 (3) 领域模型 (1)
COPYRIGHT © 2014-2024 verysu.com . ALL RIGHTS RESERVED.
Theme Kratos Made By Seaton Jiang