Files
eagle/internal/repository

Repository

Repository是数据访问层负责访问 DB、MC、外部 HTTP 等接口,对上层屏蔽数据访问细节。
后续更换、升级ORM引擎不影响业务逻辑。能提高测试效率单元测试时用Mock对象代替实际的数据库存取可以成倍地提高测试用例运行速度。
应用 Repository 模式所带来的好处,远高于实现这个模式所增加的代码。只要项目分层,都应当使用这个模式。 Repository是DDD中的概念强调 Repository 是受Domain(本项目主要是Service)驱动的。 对 Model 层只能单表操作,每一个方法都有一个参数 db *grom.DB 实例,方便事务操作。

具体职责有:

  • SQL 拼接和 DB 访问逻辑
  • DB 的拆库分表逻辑
  • DB 的缓存读写逻辑
  • HTTP 接口调用逻辑

Tips: 如果是返回的列表尽量返回map方便service使用。

建议:

  • 推荐使用编写原生SQL
  • 禁止使用连表查询,好处是易扩展,比如分库分表
  • 逻辑部分在程序中进行处理

一个业务一个目录每一个repo go文件对应一个表操作比如用户是在user目录下涉及用户相关的都可以放到这里
根据不同的模块分离到不同的文件同时又避免了单个文件func太多的问题。比如

  • 用户基础服务- user_base_repo.go
  • 用户关注- user_follow_repo.go
  • 用户喜欢- user_like_repo.go
  • 用户评论- user_comment_repo.go

单元测试

关于数据库的单元测试可以用到的几个库:

Reference