关于项目中 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

目录
相关文章
|
SQL 缓存 Java
殷浩详解DDD系列 第三讲 - Repository模式
# 第三讲 - Repository模式 **写在前面** 这篇文章和上一篇隔了比较久,一方面是工作比较忙,另一方面是在讲Repository之前其实应该先讲Entity(实体)、Aggregate Root(聚合根)、Bounded Context(限界上下文)等概念。但在实际写的过程中,发现单纯讲Entity相关的东西会比较抽象,很难落地。所以本文被推倒重来,从Repository
35805 8
|
SQL 前端开发 Java
springboot项目中各个层的作用和联系
springboot项目中各个层的作用和联系
193 0
|
SQL 前端开发 JavaScript
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
JAVA框架的层级和各层理解 controller,service,dao,mapper,model等层和各包的作用
793 0
|
Web App开发 SQL XML
实战SSM_O2O商铺_05集成SSM后验证DAO层、Service层、Controller层的配置
实战SSM_O2O商铺_05集成SSM后验证DAO层、Service层、Controller层的配置
105 0
|
存储 缓存 Java
DDD之Repository对象生命周期管理
在DDD中Repository是一个相当重要的概念。聚合是战略与战术之间的交汇点。而管理聚合的正是Repository。 因为从战略层次,分而治之,我们会按领域、子域、界限上下文、聚合逐步划分降低系统复杂度;从战术层次,我们会从实体、值对象、聚合逐步归并,汇合。 也因此有人解析DDD关键就是两个字:分与合,分是手段,合是目的。 之前写的《DDD之Repository》[1],大致介绍了Repository作用。
788 1
DDD之Repository对象生命周期管理
|
存储 XML 前端开发
使用Spring Data repository进行数据层的访问
使用Spring Data repository进行数据层的访问
191 0
使用Spring Data repository进行数据层的访问
|
SQL 存储 Java
利用 Repository 中的方法解决实际问题
基于Repository的一些基础函数来解决业务中的一些问题
|
存储
SAP S/4HANA分层存储仓库原理介绍LREP - Layered Repository
SAP S/4HANA分层存储仓库原理介绍LREP - Layered Repository
237 0
SAP S/4HANA分层存储仓库原理介绍LREP - Layered Repository
|
Java Maven
maven:mirrors和repository的关系区别
原文地址:http://my.oschina.NET/sunchp/blog/100634 1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository:存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}\.
2609 0