php服务层设计与实现的,PHP中service层怎么设计兼顾优雅和方便?
这两种其实都不好,因为不能直接从Service的接口(或函数签名)看出它需要的参数。
对于参数很多的方法,可以用对象表示参数,控制器根据Request封装得到对象(对象也可以提供一个fromRequest方法)再传给Service。
补充个例子,UserService的getList可以这样定义:
public function getList(UserCriteria criteria, $limit = 10, $offset = 0) {
...
}
看函数签名就可以知道第一个参数是UserCriteria,后面的$limit和$offset是分页用的,也可以再封装成一个类,但是没必要。
其中的UserCriteria就是查找和筛选用户的条件:
class UserCriteria
{
public $name;
public $age;
// ... 很多其他参数
public static function fromRequest(Request $req)
{
$instance = new static;
$instance->name = $req->input('name');
// ... 很多其他参数
return $instance;
}
}
在控制器调用:
public function index(Request $req)
{
$criteria = UserCriteria::fromRequest($req);
$userList = $this->userService->getList($criteria, 10);
// ...
}
好处:
明确的类型(IDE还能自动补全)
隔离HTTP请求
php服务层设计与实现的,PHP中service层怎么设计兼顾优雅和方便?相关推荐
- 如何应用好计算机教学设计,信息技术在教学活动中的应用教学设计
信息技术在教学活动中的应用教学设计 信息技术,是主要用于管理和处理信息所采用的各种技术的总称.下面是小编整理的关于信息技术在教学活动中的应用教学设计,希望大家认真阅读! [1]信息技术在教学活动中的应 ...
- 3、JavaWeb中Service层的作用、MyBatis的重要组件、mybatis-config.xml中的别名映射、properties配置、#{}和${}的区别、获取插入数据的主键值
文章目录 1.Service层的作用 2.MyBatis重要组件 Resources SqlSessionFactoryBuilder SqlSessionFactory SqlSession 针对上 ...
- 中service层的作用_浅析Java中dto、dao、service、controller的四层结构
目前我所在的项目组采用的是SpringBoot框架,前端使用BootStrap+jQuery. SpringBoot是BS开发框架之一,不用单独开启tomcat服务器,目前比较流行,一般开发大型项目时 ...
- springboot中service层注入的是实现类,但Controller层接收的是接口
我们习惯这样编写代码: 在service层写接口,然后用实现类去实现接口,并且将实现类注入到容器中 @Service public class AccountServiceImpl implement ...
- Spring中service层与dao(mapper)层
一.dao(mapper)层 DAO层叫数据访问层,全称为data access object,持久层直接和数据库打交道,具体到对于某个表的增删改查,封装了增删改查基本操作. 二.Service层 S ...
- maven子项目中service层无法依赖Failed to execute goal on project
1.项目结构是一个父项目,多个子项目目录如下: 2.子项目分别为maven_dao.maven_service和maven_controller这三个项目, 三个项目都继承父项目 3.在模块中serv ...
- SpringBoot中Service层事务控制
SpringBoot中使用事务比较简单,在Application启动类上添加@EnableTransactionManagement注解,然后在service层的方法上添加@Transactional ...
- 自定义工具类Static方法调用业务中Service层方法
文章目录 前言 一.如何实现? 二.Util工具类实现 代码相关注解 总结 前言 今天需要验证OpenId,来看是否为系统用户,直接封装一个工具类,遇到了调用业务层service的方法.记一次学习笔记 ...
- mysql 文章 字段设计_在mysql数据库中,文章表设计有啥好的思路
Q: 用mysql设计一张文章表,不知道有啥好的思路! 我是这样的,应为考虑附件和图片,所以我的文章表除了有varchar(1000)的文章内容,还设置了个Bolb接收附件和图片. 我用的是mysql ...
最新文章
- 敲的php代码怎么预览,php代码实现文件的预览
- vijos - P1279Leave-绿光(数学归纳法 + python)
- CentOS配置网易163 yum源和EPEL yum源
- 补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!
- 几个shell小脚本
- postgres 把一个表的值转成另一个表的字段名_用LUT来做一个可动态配置的卷积核...
- python requests库 response_Pytest 如何模拟 requests库中的Response对象?
- Android基础之Intent的几种常用方法
- Python Extension
- ASP.NET的Application简介1
- PCWorld:火狐浏览器已宣告死亡【转】
- python网络编程基础知识_Python 网络编程基础入门
- IP子网划分概念:IP地址,子网和网关配置——Vecloud
- 2018年12计算机应用基础统考,2018年12月统考通知
- 联发科mt8516价格_联发科MT8516销量破两亿:揭秘背后的故事
- 清华大学鲍橒计算机1999,《最强大脑》鲍橒:世界盲棋第一人的最强记忆
- 【VMware环境下Linux磁盘空间(LVM)扩容方法】
- 年薪超过 50 万的程序员在哪些公司工作?
- linux7没有ifconfig,CentOS 7 没有ifconfig新的替换命令ip
- kedacom摄像头怎么预置_[功能测评]科达(Kedacom)200万红外网络摄像机
热门文章
- RISC-V 能打 50 年!不必期待 RISC-VI —— 对话 RISC-V CTO Mark Himelstein
- 详解微软 ALUM:当语言模型遇到对抗训练
- 谈了千百遍的缓存数据一致性问题
- 2020 OPPO 开发者大会重磅推出 ColorOS 11,适配机型达 33 种
- 真的,没人能逃开“真香定律”
- 小米新生态总监董红光:致力打造智能服务开放平台
- 英特尔“宠坏”程序员!
- 公开课|百度天工物联网基础平台的微服务容器化落地实践
- 顶配 12699 元、没有 5G,“浴霸三摄”的 iPhone 到底长什么样?
- V神已抵京,倒计时4天!6大理由告诉你为什么要参加“2019以太坊技术及应用大会”...