路由最简单,首先是根据版本,例如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就好。其次就是分组,例如:
// 简单的示例,需要的话自己写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。但是很多时候也需要评估项目,不要为了设计而去过度设计,符合实际需求的才是最好的。

关于 LearnKu
推荐文章: