写作的价值不仅仅是传播想法,更在于总结和反馈。系统设计系列收到了一些读者的反馈和补充,定期整理更新。 时间方案中补充频率表达格式 在 《系统设计中需要考虑到的时间问题》文章中我们讨论了时间的标准化表达格式,在其中提到了 ISO-8601 规范。 其实 ISO-8601 中有非常多很有价值的表达方式,只不过使用不够频繁没有拿出来讲。我们应该尽可能使用现有的规范来实现业务,可以 […]
写作的价值不仅仅是传播想法,更在于总结和反馈。系统设计系列收到了一些读者的反馈和补充,定期整理更新。 时间方案中补充频率表达格式 在 《系统设计中需要考虑到的时间问题》文章中我们讨论了时间的标准化表达格式,在其中提到了 ISO-8601 规范。 其实 ISO-8601 中有非常多很有价值的表达方式,只不过使用不够频繁没有拿出来讲。我们应该尽可能使用现有的规范来实现业务,可以 […]
微服务架构中的一些概念非常模糊,业界往往没有取得共识。对于应用来说,其原因是业务背景多种多样,往往单一的模式不能满足现实需要。个人认为这是架构意识形态之争的根本原因。 今天来辨析一下微服务架构中 BFF,其含义和两种架构形态。 胖瘦 BFF 之争 我自 2015 年开始参与的所有应用系统都是服务化的了,都算比较大型的系统,这可能是解决大型复杂应用的必然之路。 在服务化的系统 […]
企业在使用微服务架构时,虽然会获得微服务架构的一些便利,但是也需要付出一些基础设施成本,而集成和部署就是其中一部分。 持续的集成和部署通常被叫做 CI/CD,意思是通过一个工具平台,在代码被推送后自动构建、部署,以此提高软件研发和集成效率。 这一期的系统设计,就来聊聊如何搭建持续集成和部署流水线。 CD/CD 简介 CI/CD 是 Continuous integratio […]
虽然 RESTful API 已经成为业界对于 API 的共识,但是不得不说,但是不得不说它具有很多局限性。 RESTful API 和很多的技术流传的原因类似:始于一种非常理想化的愿景,但是在落地时却需要做出权衡和取舍。 它的流行开始于 Roy Fielding 的演讲,Roy Fielding 也是 HTTP 协议标准作者之一。 我猜测 Roy Fielding 的想法 […]
一般来说,有经验的程序员不会使用多对多关系。因为存在“多对多关系”说明领域模型在设计时丢失了一些重要概念,无法建立清晰的模型。 这篇文章整理了一些多对多关系拆解的案例,作为日常领域模型设计的参考资料。 为了让图更简洁,本文使用 E-R 图作为分析模式来描述,在实际工作中可以转换为类图。 订单和商品 订单和商品是最常见的多对多关系,一个订单中可以有多个产品构成的订单行,而商品 […]
在过去几年一直对编程语言本身很敬畏。一方面编译原理本身是非常困难的领域,另外一方面图灵完备的语言完全满足日常需求。 直到最近,在一些技术问题上不得不尝试使用 DSL(领域特定语言,相对于 GPL,即通用编程语言)去解决。在和一些伙伴交流后把相关经验整理下来,收录到系统设计专栏中,当产生 DSL 需求时再拿出来看。 什么时候会考虑使用 DSL 或者 GPL? DSL 语言实际 […]
对于大型系统或者大型企业来说,业务系统需要支撑的场景往往多到超过想象,这也是大厂业务复杂的原因。 我们需要对这些场景进行抽象,并设计合理的拓展点。例如: 某电子产品的售后工单系统,需要处理各种场景:咨询、安装、维修、退换货、配件销售等场景,这些场景都有不同的字段,但是工单流转过程类似,如何设计模型? 财务结算系统,需要处理各种来源结算场景,生成不同的结算单,如何使用结算单统 […]
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 Eric Evans 于 2003 年出版了精采绝伦的《领域驱动设计:软件核心复杂性应对之道》,在书中他创造了领域驱动设计方法。Eric Evans […]
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 一个系统的架构是它的高层级的视图,是系统的大局观,是粗线条的系统设计。架构的决策就是系统结构上的决策,这些决策影响着全部代码,决定了系统中其它部分的基 […]
这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。 EBI 架构(Entity-Boundary-Interactor,实体-边界-交互器)架构因为 Robert C. Martin 关于整洁架构(我会 […]
在软件工程中,术语管理是一个极其冷门但是却非常重要的话题。 在很多项目上开发人员和业务人员之间的讨论有很大一部分是词汇的误解造成的,即使在技术人员、业务人员内部讨论也存在同样的情况。例如,某电信运营商项目,话费套餐属于商品还是产品这个问题经常被拿出来讨论,直到找到了总部给出的规范性文件才定性下来。 越是专业的软件系统对专业术语的定义需求越发迫切,这些定义往往需要极其精确,甚 […]
在金融、保险、电商等涉及金额计算的领域,常常需要高精度计算。但是由于计算机原理受限,普遍存在精度丢失问题。 例如,使用 JavaScript 在浏览器控制台输入: (0.1+0.2) == 0.3 我们会得到一个 false 的计算结果。 如果使用编程语言原生的计算方法会遇到大量精度问题。一般来说,我们可以优先考虑使用整数计算,例如在电商领域为了简单往往以分为单位计算金额。 […]
在 Java 项目中,对象转换是一个比较繁琐的工作,常见的转换场景有: 页面请求对象(Use Case Command)转领域模型实体(Entity)。 领域模型转换为数据库操作对象(PO)。 领域模块转返回给前端的结果对象(Use Case Response)。 …… 这些对象统称为 POJOs,也就是 Plan Object Java Object 的缩写。 这一期的系 […]
在应用系统中,使用缓存不算非常难的事,但是设计好一套缓存策略比较麻烦,这样既能起到好的缓存效果也能在合适的时候更新缓存。 今天我们聊聊缓存。 不过,在计算机科学中,有很多种缓存。我们先聊聊缓存的类型,再谈应用系统中的缓存。 我们会涉及哪些缓存知识? 这里我把缓存分为两类: 非应用缓存:难以被程序员干预、控制和使用的缓存,但是我们能通过选择合适的数据结构,写出缓存友好的代码。 […]
作为一个开发,日常工作中免不了要画一些图,无论是技术架构图还是业务流程图。基于个人的一些经验,作者分享了他的作图方法,给大家一点思路提供参考,希望在未来的工作、生活中都能有所帮助。
CRUD (1)Event Sourcing (1)graphql (1)id (1)quarkus (1)rest (1)Spring Boot (1)商品 (1)多对多 (1)子域 (1)字符集 (1)客户端心跳 (1)并发 (1)应用架构图 (1)康威定律 (1)异步复制 (1)微服务架构 (1)技术方案 (2)技术架构 (1)技术架构图 (1)技能 (1)持续集成 (1)支撑域 (1)故障恢复 (1)数据架构图 (1)日记 (1)服务发现 (1)服务治理 (1)服务注册 (2)核心域 (1)泄漏 (1)洋葱架构 (1)深度 (1)源码剖析 (1)熔断 (1)状态 (1)生态 (1)画图工具 (1)研发团队 (1)线程 (2)组织架构 (1)编排 (1)编码 (1)耗时 (1)视频 (9)读写分离 (1)软件设计 (1)连接 (1)通用域 (1)集群化 (1)
COPYRIGHT © 2014-2024 verysu.com . ALL RIGHTS RESERVED.
Theme Kratos Made By Seaton Jiang