关于项目中 Repository 层的思考

简介: 关于项目中 Repository 层的思考

文章目录:

  • 前言
  • Repository 的定位
  • Repository 的实现
  • Repository 的接口
  • 小结
  • 推荐阅读


前言

关于项目中是否需要 Repository 层?这个问题,好像没有肯定的答案,下面是我的思考分享给大家,不喜勿喷。

Repository 的定位

我理解 Repository 是个大仓库,里面可以有 MySQLRedisMongoDB ... 等数据。

维护这一层的开发者,可以称为 仓库管理员 ,当使用者需要查询数据的时候,需要告诉仓库管理员,由仓库管理员拿给他,至于仓库管理员从哪拿的数据,使用者无需关系。

同理,当需要创建或更新数据的时候,也需要告诉仓库管理员,由仓库管理员进行操作数据。

总结:Repository 主要是封装数据的查询、创建、更新、删除等逻辑,供使用者调用。

Repository 的实现

  • 可配置条件查询
  • 可配置数据转换
  • 可配置数据验证

解释下 “可配置数据转换” :当我们需要返回隐私性字段时,例:如手机号,如果使用者无数据权限时,手机号字段中间 4 位需要进行加 * 处理,还有处理返回的时间格式等。

如果你使用的是 Laravel 框架,可以参考下 andersao/l5-repository[1]

Repository 的接口

Repository 层的接口可以理解为契约(可了解下 Laravel Contracts 目录),它是受 Domain 驱动的,Repository 中定义的功能要体现 Domain 的意图和约束。Domain 需要什么我才提供什么,不需要的我不会提供。

例如,接口名可以定义为 searchUsersByIdsearchUsersByName,不可以定义为 searchUsersByInfo,查询的字段也不建议设置为 * ,仅查询需要的字段进行返回。

什么是 Domain?可以理解为领域层。

小结

使用 Repository 层有利有弊,弊端就是有些繁琐,没有 ORM 一把梭的顺畅。当然优点也有很多,主要是后期的可维护性大大提高。

列举一些优点:

  • 更换、升级 ORM 引擎时,不影响业务逻辑;
  • 便于单元测试,可用 Mock 对象代替实际的数据库存取;

以上,希望对你能够有所帮助。

推荐阅读

参考资料

[1]andersao/l5-repository: https://github.com/andersao/l5-repository

目录
相关文章
|
测试技术 uml 数据安全/隐私保护
UML图——用例图
用例图是由参与者(Actor)、用例(Use Case)以及用它们之间的关系构成的用于描述系统静态视图的UML图(本定义摘自百度百科)。用例图能够展示系统外部的各类执行者与系统中用例的关系。
UML图——用例图
|
JavaScript
VUE上传功能本地上传正常,打包上传后报错TypeError: ***.upload.addEventListener is not a function
VUE上传功能本地上传正常,打包上传后报错TypeError: ***.upload.addEventListener is not a function
1577 0
|
3月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
缓存 关系型数据库 PostgreSQL
PostgreSQL自增ID的初始化语句
【5月更文挑战第10天】PostgreSQL自增ID的初始化语句
501 2
|
11月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
835 1
Maven——创建 Spring Boot项目
|
SQL druid Java
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
222 0
|
12月前
|
机器学习/深度学习 算法 搜索推荐
图神经网络综述:模型与应用
图神经网络综述:模型与应用
|
10月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
319 1
|
安全 Java 数据安全/隐私保护
用Spring Security快速实现 RBAC模型案例
RBAC模型是一种常见的权限管理机制,它将权限赋予角色而非用户,用户通过角色获取权限。主要组件包括用户、角色、权限、会话、角色分配和权限分配。RBAC简化了权限管理,方便权限变更,常用于大型组织。
656 0
|
缓存 Java 微服务
Spring Cloud中@RefreshScope实现动态刷新的原理
Spring Cloud中@RefreshScope实现动态刷新的原理