路由最简单,首先是根据版本,例如v1
、v2
这样的。目录结构也可以以Http/api/v1
、Http/api/v2
作为api的目录,路由文件中写好namespace就好。其次就是分组,例如:
// 简单的示例,需要的话自己写namespace等信息
Route::prefix('v1')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v1 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v1 版本的订单相关路由
});
});
Route::prefix('v2')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v2 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v2 版本的订单相关路由
});
});
至于service
和控制器层
,也有两种分法:
1、控制器负责数据校验,调用不同的service
组合成结果。例如先用到userService
,获取到用户的id
等信息,然后再用id
调用orderService
查订单信息。
2、控制器负责数据校验,调用复合service
,例如还是获取用户订单,直接调用复合的userOrderService
,userOrderService
调用了userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。
3、如果再细分一下,还可以引入interface
,数据仓库
或者service
实现interface
,也就是说这个interface
规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。
总结:一般来说,分层的话,controller
→service
→repository
→model
,就已经够用了,不需要interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。
路由最简单,首先是根据版本,例如v1
、v2
这样的。目录结构也可以以Http/api/v1
、Http/api/v2
作为api的目录,路由文件中写好namespace就好。其次就是分组,例如:
// 简单的示例,需要的话自己写namespace等信息
Route::prefix('v1')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v1 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v1 版本的订单相关路由
});
});
Route::prefix('v2')->group(function () {
Route::prefix('user')->group(function () {
// 在这里添加 v2 版本的用户相关路由
});
Route::prefix('order')->group(function () {
// 在这里添加 v2 版本的订单相关路由
});
});
至于service
和控制器层
,也有两种分法:
1、控制器负责数据校验,调用不同的service
组合成结果。例如先用到userService
,获取到用户的id
等信息,然后再用id
调用orderService
查订单信息。
2、控制器负责数据校验,调用复合service
,例如还是获取用户订单,直接调用复合的userOrderService
,userOrderService
调用了userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。
3、如果再细分一下,还可以引入interface
,数据仓库
或者service
实现interface
,也就是说这个interface
规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。
总结:一般来说,分层的话,controller
→service
→repository
→model
,就已经够用了,不需要interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。
路由最简单,首先是根据版本,例如
v1
、v2
这样的。目录结构也可以以Http/api/v1
、Http/api/v2
作为api的目录,路由文件中写好namespace就好。其次就是分组,例如:至于
service
和控制器层
,也有两种分法:1、控制器负责数据校验,调用不同的
service
组合成结果。例如先用到userService
,获取到用户的id
等信息,然后再用id
调用orderService
查订单信息。2、控制器负责数据校验,调用复合
service
,例如还是获取用户订单,直接调用复合的userOrderService
,userOrderService
调用了userRepository
、orderRepository
和其他数据仓库,最后组合成一个获取用户订单的服务。3、如果再细分一下,还可以引入
interface
,数据仓库
或者service
实现interface
,也就是说这个interface
规定了当前的类(数据仓库或者service,不同的写法)注入的参数、返回值的类型。总结:一般来说,分层的话,
controller
→service
→repository
→model
,就已经够用了,不需要interface
。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。