写点什么

基于 Code 开源版二次开发流程:DDD 架构落地用户模型管理全流程

作者:王中阳Go
  • 2025-11-07
    北京
  • 本文字数:1661 字

    阅读完需:约 5 分钟

最近有基于 coze 开源版做二次开发,踩了不少坑,我把花了几天时间梳理出来的开发流程分享给大家。


下面以自定义用户接入的模型举例:coze 开源版的模型是在配置文件中配置的,不够灵活,我们希望让用户能够在网站直接配置自己的模型,类似下面这种效果:



大家理解清楚需求之后,看下面的实现思路,你们开发别的功能也可以参考我的开发流程,能让你少踩很多坑:

一、领域层(Domain - 核心层,聚焦纯业务领域模型与抽象接口)

领域层是业务的核心,需先定义纯业务相关的实体、接口,再通过基础设施层实现接口。

1. 数据表设计与创建

  • 依据用户模型管理的业务需求,设计对应的数据库表结构(如用户基本信息表、用户角色关联表等)。

  • 执行建表语句,完成物理表的创建。

2. 生成数据库相关基础代码

  • 使用 gorm 工具生成数据库交互的基础代码:

  • 实体类:backend/domain/usermodel/internal/dal/model/(与数据表一一映射的结构体)。

  • 基础操作:backend/domain/usermodel/internal/dal/query/(表的基础 CRUD 方法)。

  • 若需多个数据访问对象(DAO),可在backend/domain/usermodel/internal/dal/下创建dao文件夹,统一管理 DAO 文件;DAO 的作用是实现后续定义的数据仓库接口。

3. 定义领域实体(业务对象)

  • 编写backend/domain/usermodel/entity/下的实体类(非数据库表映射)。

  • 内容:包含用户模型管理领域所需的业务字段、结构体,以及核心业务行为(如用户状态校验、角色权限判断等)和业务规则(如用户名唯一性约束)。

4. 定义领域服务接口(业务逻辑聚合)

  • 编写backend/domain/usermodel/service/user_model.go,定义领域服务接口。

  • 接口内容:聚合用户模型管理业务的核心功能(如创建用户、查询用户详情、更新用户角色等),明确业务逻辑的抽象契约。

5. 定义数据仓库接口(数据库交互抽象)

  • 编写backend/domain/usermodel/repository/repository.go,定义数据仓库接口。

  • 接口内容:聚合与数据库交互的方法(如从库中查询用户、保存用户数据等),作为领域层与数据层的抽象交互契约。

6. 实现数据仓库接口(数据库交互逻辑)

  • 编写backend/domain/usermodel/internal/dal/user_model.go,实现步骤 5 中定义的数据仓库接口。

  • 逻辑:通过 gorm 生成的基础代码(model/query)或自定义 DAO,完成具体的数据库读写操作。

7. 实现领域服务接口(业务逻辑实现)

  • 编写backend/domain/usermodel/service/user_model_impl.go,实现步骤 4 中定义的领域服务接口。

  • 同时,在该文件中创建用户模型领域服务实例(供应用层调用),封装业务逻辑的具体实现(如调用数据仓库接口完成数据交互,结合领域实体的业务规则处理逻辑)。

二、应用层(Application - 协调领域层与外部交互)

应用层作为中间层,负责调用领域层的功能,协调业务流程,对外提供统一交互入口。

1. 应用服务实例初始化与交互逻辑实现

  • 创建全局应用服务实例:编写backend/application/usermodel/user_model.go,定义全局应用服务实例(用于衔接领域层与 API 网关层)。

  • 初始化实例:编写backend/application/usermodel/init.go,通过调用领域层user_model_impl.go提供的领域服务实例创建方法,完成全局应用服务实例的初始化。

  • 实现交互逻辑:在user_model.go中,基于初始化后的应用服务实例,编写与领域层的具体交互逻辑(如组合多个领域服务接口,完成复杂业务流程)。

三、API 网关层(基础设施层,实现抽象接口,对外提供访问入口)

API 网关层负责接收外部请求,通过应用层调用领域层功能,返回处理结果。

1. 生成 API 相关代码

  • 在 IDL(接口定义语言)目录下编写api.thrift文件,定义用户模型管理的外部接口(如 HTTP/Thrift 接口)。

  • 执行命令hz update --idl ../idl/api.thrift --enable_extends,生成对应的 API 框架代码(包括路由、参数解析等)。

2. 实现 Handler 逻辑

  • 在生成的 Handler 文件中,通过调用应用层的全局应用服务实例,将外部请求转换为领域层的业务调用。

  • 逻辑:接收请求参数→调用应用层方法→处理返回结果→返回给调用方。

总结

按照前面的思路,就可以很清晰的进行新功能的开发了,整理不易,觉好留赞。


对智能体开发感兴趣的朋友可以关注我,私信我:wangzhongyang1993

发布于: 17 小时前阅读数: 10
用户头像

王中阳Go

关注

靠敲代码在北京买房的程序员 2022-10-09 加入

【微信】wangzhongyang1993【公众号】程序员升职加薪之旅【成就】InfoQ专家博主👍掘金签约作者👍B站&掘金&CSDN&思否等全平台账号:王中阳Go

评论

发布
暂无评论
基于 Code 开源版二次开发流程:DDD 架构落地用户模型管理全流程_DDD_王中阳Go_InfoQ写作社区