Bao Tingyu's Blog

树型结构数据存储实践

很多业务场景会遇到树形结构的数据,如公司的人员职级树、行政区划树等。 使用类似MySQL的数据库进行存储,需要将树形结构(二维)存储到行格式(一维)的db中。 本文介绍了树型结构数据存储的三种方式:Adjacency Table , Nested Set , Bridge Table (Closure Table)。 以下方法均基于场景: 设想一个职员团队树,节点中为职工工号id和职工名...

星型模式:业务模型扩展字段存储

构建业务模型时,通常模型会设置扩展信息,存储上一般使用JSON格式存储到db中。JSON虽然有较好的扩展性,但并没有结构化存储的类型和非空等约束,且强依赖代码中写入/读取时进行序列化/反序列化操作, 当扩展信息结构简单且不作为查询条件时使用JSON可以满足需求,但有些场景要求根据扩展字段进行查询,虽然有类似JSON_CONTAINS关键字匹配JSON内部字段,但不是所有db及其版本都支持JS...

业务代码插件式开发实践

在学习编程初期,会接触到设计模式的概念:23种设计模式,单例模式,策略模式,… 。接触业务研发后,对设计模式的使用和实践有了更深的见解。 使用设计模式是目的为了更高效的支撑业务诉求,如何在保证代码质量的情况下变更/扩展现有功能,这里的代码质量可分为健壮性和可读性两大类,分别包含以下方面: 健壮性:并发控制、事务、单点变更、性能、可测试 可读性:业务语义、圈复杂度、认知复杂度、c...

基于DDD的编码实践

分层设计 领域驱动设计(Domain-driven design, DDD) 作为一种复杂软件系统的应对方案,在设计和编码提供了一种新的解决方式,即领域驱动,要求程序员在设计和编码时从领域专家的角度 出发来实现架构/代码,做到代码即业务。同时利用各种方式拆解复杂模块,常用的方式有拆分子域、构建富血对象。 设计时,需要建立统一语言,确保领域中的业务概念处于同一个限界上下文,比如在一套电商系...