标签: 领域建模
银行核心系统建模随笔
核心系统的模型看起来很朴素:账户、余额、交易、分录。真正做进去才发现,每一个概念背后都有一堆不能妥协的约束,而这些约束在需求文档里往往一个字都没写。这篇是零散的建模笔记,按我认为重要性排的顺序。 核心系统到底在建模什么 先把定位说清楚。核心系统建模的对象不是"业务流程",而是会计事实。 客户在手机上点一下转账,这是渠道行为;反洗钱要不要拦、限额够不够,这是风控与协议判断;而核心真正负责的只有一件事:在正确的会计日,把一组借贷平衡的分录准确地记下来,并保证余额永远等于分录累计的结果。 想清楚这一点 …
核心系统的模型看起来很朴素:账户、余额、交易、分录。真正做进去才发现,每一个概念背后都有一堆不能妥协的约束,而这些约束在需求文档里往往一个字都没写。这篇是零散的建模笔记,按我认为重要性排的顺序。 核心系统到底在建模什么 先把定位说清楚。核心系统建模的对象不是"业务流程",而是会计事实。 客户在手机上点一下转账,这是渠道行为;反洗钱要不要拦、限额够不够,这是风控与协议判断;而核心真正负责的只有一件事:在正确的会计日,把一组借贷平衡的分录准确地记下来,并保证余额永远等于分录累计的结果。 想清楚这一点 …
《领域驱动设计》读书笔记
这本书我读过三遍。第一遍在工作两年时,只记住了实体、值对象、聚合这几个名词;第二遍在做核心重构时,才发现前面几章才是重点;第三遍是带团队时读的,读出来的东西又不一样。 这本书真正的价值 大部分人把它当模式手册用,翻到"聚合"那一节抄个定义就开始设计。但 Evans 花了整本书篇幅想说的其实是一件事:软件设计的瓶颈是知识,不是技术。 模型不是画出来的,是在和业务专家反复对话中"长"出来的。书里那些模式只是长出来之后用于表达的工具。工具本身不产生知识。 一个团队如果没有和业务专家持续对话的机制,那么 …
这本书我读过三遍。第一遍在工作两年时,只记住了实体、值对象、聚合这几个名词;第二遍在做核心重构时,才发现前面几章才是重点;第三遍是带团队时读的,读出来的东西又不一样。 这本书真正的价值 大部分人把它当模式手册用,翻到"聚合"那一节抄个定义就开始设计。但 Evans 花了整本书篇幅想说的其实是一件事:软件设计的瓶颈是知识,不是技术。 模型不是画出来的,是在和业务专家反复对话中"长"出来的。书里那些模式只是长出来之后用于表达的工具。工具本身不产生知识。 一个团队如果没有和业务专家持续对话的机制,那么 …
DDD 在银行核心系统的落地实践
银行核心系统是一类很特殊的软件:它的业务规则几十年没怎么变,但承载它的代码每隔七八年就要重写一次。我参与过一次核心的部分重构,也旁观过一次彻底失败的重写。DDD 在这两次里都被提过,但只有一次真的起了作用。这篇把我认为有效的部分和纯属自我感动的部分分开写。 为什么银行核心需要 DDD 老核心的问题从来不是技术栈老。COBOL 写的联机交易照样能扛住每秒几千笔。真正的问题是:业务知识只存在于少数几个人的脑子里,代码里找不到对应的表达。 一段典型的老代码长这样:把交易码、账户类型、产品编号、机构号混 …
银行核心系统是一类很特殊的软件:它的业务规则几十年没怎么变,但承载它的代码每隔七八年就要重写一次。我参与过一次核心的部分重构,也旁观过一次彻底失败的重写。DDD 在这两次里都被提过,但只有一次真的起了作用。这篇把我认为有效的部分和纯属自我感动的部分分开写。 为什么银行核心需要 DDD 老核心的问题从来不是技术栈老。COBOL 写的联机交易照样能扛住每秒几千笔。真正的问题是:业务知识只存在于少数几个人的脑子里,代码里找不到对应的表达。 一段典型的老代码长这样:把交易码、账户类型、产品编号、机构号混 …