如果我们要将应用程序,划分为业务逻辑
,和插件
两个部分。就必须仔细的了解业务逻辑是什么。
严格来讲,业务逻辑,就是只与赚钱或者省钱的业务逻辑与过程。
例如,银行要对借贷者收取N%
利息,这个逻辑就是银行获取收入方面的一条业务逻辑。注意,这里并没有提到是让计算机来计算这里的N
是多少,还是说让一个银行职员手动输入这个N
。也就是说无论这些业务逻辑,是在计算机上实现,还是人工执行的。它们在赚钱/省钱上的作用都是一样的。
我们通常称这种逻辑为关键业务逻辑
,因为它们是一项业务的关键部分。
关键业务逻辑
通常会需要处理一些数据,比如借贷业务逻辑中,我们需要知道借贷的数量,利率,以及还款日程。这些数据称为关键业务数据
,因为这些数据无论自动化程序存在与否,都必须要存在。
关键业务逻辑
,和关键业务数据
是紧密相连的,所以他们很适合放在同一个对象中处理。我们将这种对象成为业务实体
。
业务实体
是程序中的一种对象,它包含了一系列用于操作关键数据
的业务逻辑。它们要么直接包含关键业务数据
,要么可以访问这些数据。其接口层,是由实现关键业务逻辑
,操作关键数据
的函数组成。
下图是一个对应借贷业务的实体类Loan
的UML
。包含了三个关键业务数据
,三个关键业务逻辑
的接口。
这个类独自代表了整个业务逻辑
,并且与数据库,用户界面,第三方框架等内容无关。所以它可以在任何一个系统中提供与其业务逻辑
相关的服务,它不用管这个系统如何呈现数据给用户,数据如何存储,或者以何种方式运行。总而言之,业务实体
这个概念中,应该只有业务逻辑
,没有别的。
业务实体
不一定是一个类,因为它不一定非要用面向对象语言的类来实现。业务实体
这个概念只要求我们将关键业务逻辑
和关键业务数据
绑定在一个独立的软件模块内。
用例是一个为了描述特定场景下的业务逻辑
的存在,定义了用户所需要提供的输入数据,用户应该得到的输出信息,以及产生输出后所应该采取的处理步骤。
在今天这个时代,我们通常将用例和API
接口绑定在一起,一个API
接口可以有多个用例。业务实体
并不知道,也不需要知道是哪个用例在调用它,这也是依赖反转原则(DIP)
的另一个应用情景。
在作者的描述中,似乎用例是写在代码里,作为一个组件存在的,属于低层概念,而业务逻辑作为高层概念,因为用例靠近输入输出端。
但在今天,我们通常使用API
平台来写用例,代码只写单元测试。
通常情况下,用例接收数据并产生输出数据。但是一个设计良好的架构中,用例对象通常不应该之道数据应该以什么方式展示。如是在Web
还是控制台
。所以用例中的代码,不应该出现HTML
和SQL
。
因此用例类的输入与输出应该只是简单的数据结构(API
平台刚好只用在乎简单输入)。
如果非要用代码写用例,那么就不要让输入的数据结构,与输出的数据结构,有所依赖关联,虽然它们可能就是有很多相同的数据。因为它们存在的意义不一样,变更原因和速率也不一样,通过引用或其它方式整合在一起,就是违反了共同闭包原则(CCP)
和单一职责原则(SRP)
。
业务逻辑
是一个软件系统存在的意义,属于核心功能,是系统用来赚钱或省钱的那一部分代码。
这些业务逻辑
应该保持纯净,不要掺杂用户界面和数据库相关的东西。其他低层次的概念应该以插件形式接入到系统中。业务逻辑应该是系统中最独立,复用性最高的代码。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。