在之前的章节 代码分层设计 有提及到” 模型“的概念。

这一章节,我们集中介绍一下在 GoFrame 中关于模型的定义以及对应的管理。

一、数据模型

数据模型 又叫做 实体模型,主要是来自于底层持久化数据库的数据结构,例如: MySQLRedisMongoDBKafka 等等。这部分数据结构是由第三方系统维护的,可以通过工具对其集合数据结构进行识别,并自动生化成对应的程序数据模型代码。这部分数据模型的代码位于 /internal/model/entity 目录下。开发者不需要手动在程序中维护数据模型,在 GoFrame 框架规范中,数据模型统一使用 CLI 工具统一维护,代码自动生成。

数据模型与业务模型 - 图1

数据模型示例

二、业务模型

业务模型主要包含两类: 接口输入/输出模型业务输入/输出模型

接口输入/输出模型

接口输入/输出模型用于系统/服务间的接口交互,定义在 api 接口层中,供工程项目所有的层级调用,例如 controller, logic, model 中均可以调用 api 层的输入输出模型,但是 api 层仅用于与外部服务的接口交互,该模型中不能调用或者引用内部的模型如 model 模型。在 GoFrame 框架规范中,这部分输出输出模型名称以 XxxReqXxxRes 格式命名。

数据模型与业务模型 - 图2

接口输入模型示例

业务输入/输出模型

业务输入/输出模型 用于服务 内部 模块/组件之间的方法调用交互,特别是 controller->service 或者 service->service 之间的调用。这部分模型定义在 model 模型层中。在 GoFrame 框架规范中,这部分输入输出模型名称通常以 XxxInputXxxOutput 格式命名。

数据模型与业务模型 - 图3

业务输入模型与业务输出模型示例

特殊的业务模型 DO

GoFrame 有一类特殊的业务模型 DO,介于业务模型与数据模型之间,主要用于结合框架强大的 ORM 组件大大简便 DAO 数据访问操作。

数据模型与业务模型 - 图4

DO主要用于DAO数据访问操作

三、其他模型

还有内部私有的模型,用于模块内部调用,例如在 logic 各个业务模块内部定义的模型,用于内部逻辑,不对外公开。