Laravel 6 框架中使用Repository模式

为什么要使用Repository

若将数据库逻辑都写在model,会造成model的肥大而难以维护,基于SOLID原则,我们应该使用Repository模式辅助model,将相关的数据库逻辑封装在不同的repository,方便中大型项目的维护

数据库逻辑

在CRUD中,CUD比较稳定,但R的部分则千变万化,大部分的数据库逻辑都在描述R的部分,若将数据库逻辑写在controller或model都不适当,会造成controller与model肥大,造成日后难以维护。

Model
使用repository之后,model仅当成Eloquent class即可,不要包含数据库逻辑,仅保留以下部分:

Property:如$table,$fillable…等。
Mutator:包括mutator与accessor。
Method:relation类的method,如使用hasMany()与belongsTo()。
注释:因为Eloquent会根据数据库字段动态产生property与method,等。若使用Laravel IDE Helper,会直接在model加上@property与@method描述model的动态property与method。

在中大型项目,会有几个问题:

将数据库逻辑写在controller,造成controller的肥大难以维护。
违反SOLID的单一职责原则:数据库逻辑不应该写在controller。
controller直接相依于model,使得我们无法对controller做单元测试。
比较好的方式是使用repository:
将model依赖注入到repository。
将数据库逻辑写在repository。
将repository依赖注入到service。

posted on 2021-07-12 10:19  jellysheep  阅读(309)  评论(0编辑  收藏  举报

导航