知识卡片

业务实体:把关键业务逻辑与关键业务数据绑定为独立模块

普通读书笔记卡

内容

严格来讲,业务逻辑就是程序里真正用来赚钱或省钱的逻辑与过程——判断标准很干脆:无论这段逻辑是靠计算机执行、还是由人拿计算器手工执行,它在省钱赚钱上的作用都是一样的(比如银行按N%利率收取贷款利息,无论是系统自动算还是柜员手工算,都是同一条业务规则)。这类逻辑被称为”关键业务逻辑”,因为不管有没有自动化系统,它都是业务本身不可分割的一部分;这类逻辑通常需要处理的数据(如借贷金额、利率、还款日程)被称为”关键业务数据”,同样是无论自动化与否都必须存在的数据。因为关键业务逻辑和关键业务数据天然紧密相关,适合被放进同一个对象里处理,这个对象被称为业务实体(Entity)——它要么直接包含关键业务数据,要么能轻松访问这些数据,接口层由实现关键业务逻辑、操作关键业务数据的函数组成(比如借贷业务的Loan实体类包含贷款金额、利率、还款日程三项数据,以及三个体现关键业务逻辑的函数接口)。创建这样一个类的意义在于,把软件里真正实现该项业务的部分聚合起来,与系统里其余部分(数据库、用户界面、第三方框架)彻底隔离——这个类完整代表业务逻辑本身,不关心系统如何呈现给用户、数据如何存储、程序如何运行,理论上可以在任何系统里提供与其业务逻辑相关的服务。需要澄清的是,业务实体不一定要用面向对象语言的class来实现——它的本质要求只是”把关键业务数据和关键业务逻辑绑定进一个独立的软件模块”,具体载体形式并不重要。

参考来源

- 位置:《架构整洁之道》第20章《业务逻辑》引言"业务实体"(源文件:_epub-src/text/part0014_split_005.html) - 结论依据:原文用银行贷款利息计算说明"关键业务逻辑"不因是否自动化而改变,定义"关键业务数据"及两者绑定形成的"业务实体"概念,并用Loan类说明实体只包含业务逻辑、与数据库/UI/框架无关,明确实体不必是class而只需绑定数据逻辑到独立模块,直接支撑本卡片结论。 - 原始内容:我们通常称这些逻辑为"关键业务逻辑",因为它们是一项业务的关键部分,不管有没有自动化系统来执行这项业务,这一点是不会改变的……业务实体这个概念中应该只有业务逻辑,没有别的……业务实体这个概念只要求我们将关键业务数据和关键业务逻辑绑定在一个独立的软件模块内。