Lumen框架—升级改造之路-仓储层

2023-11-23 11:50

本文主要是介绍Lumen框架—升级改造之路-仓储层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

仓储层与逻辑层搭建 

Lumen官方文档:https://lumen.laravel.com/docs/5.5

我的项目地址:https://github.com/BusinessL/big-lumen

 

1.Lumen基础框架中,并不包含仓储层,与业务逻辑层,所以我们在app文件夹下,新建两个文件夹(Repositories、Services)。另外新建Models文件夹,用来存放数据源文件。

别害怕在Lumen预设目录以外建立其他目录,根据SOLID单一职责原则,class功能越多,责任也越多,因此违法单一职责原则,所以你应该将你的程式分割成更小的部分,每个部分都有它专属的功能,而不是一个class功能包山包海,所以整个架构体系不应该只有MVC三个部分,放手根据你的需求建立适当的目录,并将适当的class放到该目录,只要我们的class有namespace帮我们分类即可。

如何使用仓储层?

使用理由:在 CRUD 中,CUD 比较稳定,但 R 的部分則千变万化,大部分的业务逻辑都在描述 R 的部分,若將业务逻辑写在 controller 或 model 都不适当,会造成 controller 与 model 肥大,造成日后难以维护。

注意:使用 repository 之后,model 仅当成Eloquent class 即可,不要包含业务逻辑,仅保留以下部分 :

①基础属性:例如 $fillable、$hidden 等。

②Method: relation类的 method,例如 hasMany() 与 belongsTo() 等。

 仓储层建立

 在 仓储层与逻辑层搭建一节中,我已经创建了Repositories文件夹,这个文件夹用来存放仓储文件。再重申一下,仓储的定义,它是数据访问层,与底层MySQL、Oracle等进行数据交互。

 底层的数据层是多变的,我们这里根据依赖倒置原则(Dependence Inversion Principle),是程序要依赖于抽象接口(interface),不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

下面我们在仓储Repositories文件夹中,再新建两个文件夹用来存放接口及其实现,取名为ContractsEloquents。Contracts存放接口,Eloquents用来存放接口的实现。

首先,我们在仓储层中,新建一个BASE接口文件(BaseInterface)与它的抽象类实现(BaseEloquent),可以在其中定义通用方法,具体参见我的代码库https://github.com/BusinessL/big-lumen。

BaseInterface文件内容如下所示:

<?phpnamespace App\Repositories\Contracts;use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;interface BaseInterface
{/***  更新*/      public function update(array $where, array $attributes);
}

  

  BaseEloquent内容如下所示

<?phpnamespace App\Repositories\Eloquents;use App\Repositories\Contracts\BaseInterface;abstract class BaseEloquent implements BaseInterface
{/*** Instance that extends Illuminate\Database\Eloquent\Model** @var Model*/protected $model;/*** Constructor*/public function __construct(){ $this->makeModel();}/*** Specify Model class name.** @return mixed*/abstract public function model();/*** 注入* @return Model|mixed* @throws GeneralException*/public function makeModel(){$model = app()->make($this->model());return $this->model = $model;}/***  更新*/public function update(array $where, array $attributes){return $this->model->where($where)->update($attributes);}
}

  

  

注意:一个类需要绑定、注册至容器中,才能被“制造”。对,一个类要被容器所能够提取,必须要先注册至这个容器。既然 Laravel 称这个容器叫做服务容器,那么我们需要某个服务,就得先注册、绑定这个服务到容器,那么提供服务并绑定服务至容器的东西,就是服务提供者(Service Provider)。如下代码使用bind绑定方法。

示例代码如下:

<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;class RepositoriesServiceProvider extends ServiceProvider
{/*** Indicates if loading of the provider is deferred.** @var bool*/protected $defer = true;/*** Register any application services.** @return void*/public function register(){$this->app->bind(\App\Repositories\Contracts\UserInterface::class,\App\Repositories\Eloquents\UserEloquent::class);}
}

  

好了,现在我们就可以定义每个model的数据访问文件,继承BaseEloquent并实现相应的接口了。

 

下一节,来讲解下逻辑层,控制器如何使用逻辑,逻辑如何使用仓储。

 

转载于:https://www.cnblogs.com/jingying/p/10371382.html

这篇关于Lumen框架—升级改造之路-仓储层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/417754

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

最新Spring Security实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)

《最新SpringSecurity实战教程之表单登录定制到处理逻辑的深度改造(最新推荐)》本章节介绍了如何通过SpringSecurity实现从配置自定义登录页面、表单登录处理逻辑的配置,并简单模拟... 目录前言改造准备开始登录页改造自定义用户名密码登陆成功失败跳转问题自定义登出前后端分离适配方案结语前言

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结