php一份代码分层规范

简介: 复杂的逻辑,有进度的 ,比如功能的审批、比如订单的创建这种影响比较大的链条式请求

控制器层


  • 事务开关
  • 调用Service Validata进行数据验证
  • 调用Process Service Do


  • Other Service Validata
  • Other Service Do


public function createOrder(Request $request)
    {
        DB::beginTransaction();
        try {
            $this->orderService->validatorCreateOrder($request);
            $goods = $this->orderService->validatorGoods($request);
            // 设置商品
            $this->orderProcessService->setGoods($goods);
            // 优惠码
            $coupon = $this->orderService->validatorCoupon($request);
            // 设置优惠码
            $this->orderProcessService->setCoupon($coupon);
            $otherIpt = $this->orderService->validatorChargeInput($goods, $request);
            $this->orderProcessService->setOtherIpt($otherIpt);
            // 数量
            $this->orderProcessService->setBuyAmount($request->input('by_amount'));
            // 支付方式
            $this->orderProcessService->setPayID($request->input('payway'));
            // 下单邮箱
            $this->orderProcessService->setEmail($request->input('email'));
            // ip地址
            $this->orderProcessService->setBuyIP($request->getClientIp());
            // 查询密码
            $this->orderProcessService->setSearchPwd($request->input('search_pwd', ''));
            // 创建订单
            $order = $this->orderProcessService->createOrder();
            DB::commit();
            // 设置订单cookie
            $this->queueCookie($order->order_sn);
            return redirect(url('/bill', ['orderSN' => $order->order_sn]));
        } catch (RuleValidationException $exception) {
            DB::rollBack();
            return $this->err($exception->getMessage());
        }
    }


Service层


  • Validata —— 数据有效性验证
  • Do —— 查询数据的封装 调用Model
  • 支持嵌套事务的框架 Service可做事务开关


public function validatorCoupon(Request $request):? Coupon
{
    // 如果提交了优惠码
    if ($request->filled('coupon_code')) {
        // 查询优惠码是否存在
        $coupon = $this->couponService->withHasGoods($request->input('coupon_code'), $request->input('gid'));
        // 此商品没有这个优惠码
        if (empty($coupon)) {
            throw new RuleValidationException(__('dujiaoka.prompt.coupon_does_not_exist'));
        }
        // 剩余次数不足
        if ($coupon->ret <= 0) {
            throw new RuleValidationException(__('dujiaoka.prompt.coupon_lack_of_available_opportunities'));
        }
        return $coupon;
    }
    return null;
}
public function withGoodsByAmountAndStatusUnsold(int $goodsID, int $byAmount)
{
    $carmis = Carmis::query()
        ->where('goods_id', $goodsID)
        ->where('status', Carmis::STATUS_UNSOLD)
        ->take($byAmount)
        ->get();
    return $carmis ? $carmis->toArray() : null;
}


Process Service层


复杂的逻辑,有进度的 ,比如功能的审批、比如订单的创建这种影响比较大的链条式请求


  • 调用Service
  • Save Data To Do Process —— 保存数据 进行处理
  • 支持嵌套事务的框架 Process Service可做事务开关


// ip地址
$this->orderProcessService->setBuyIP($request->getClientIp());
// 查询密码
$this->orderProcessService->setSearchPwd($request->input('search_pwd', ''));
// 创建订单
$order = $this->orderProcessService->createOrder();


Job层


任务层,如发送邮件任务,发送接口请求任务(ERP等),入队任务


Model层


对数据的自动化进行设置,不进行封装 如 getByIds等,封装到逻辑中 - 时间戳自动更新 - 格式自动转化 - 附加字段 - 关联关系


实例举例


酒吧系统: 下单 - 控制器 - - 事务 - - 调用GoodsService验证 店铺、商品有效性(商品id有效性、是否属于当前店铺、是否下架等) - - 调用OrderProcessService,进行订单进程性处理,setStaff员工信息,setGoods下单商品信息,setTable信息等 - - OrderProcessService 调用 OrderService 进行订单插入,调用GoodsService 进行库存减少,调用TableService进行统计信息更新等 - - - 调用Job层,进行ERP信息推送对接 - - - 调用Job层,进行小票任务推送 - - 请求结束,事务、响应

目录
相关文章
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
|
1月前
|
PHP 开发者 UED
PHP 中的异常处理:提高代码健壮性的关键
【2月更文挑战第28天】在 PHP 开发中,异常处理是确保应用程序稳定性和可靠性的重要环节。本文将深入探讨 PHP 异常的概念、类型及其处理机制,并通过实例演示如何有效地捕获和处理异常,以增强代码的健壮性和用户体验。
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
php案例:用代码的方式创建目录+文件+写入数据(都由你定)
|
3月前
|
前端开发 JavaScript PHP
|
3月前
|
前端开发 JavaScript 关系型数据库
PHP代码合集21个邮箱2个问答23个ajax特效
PHP代码合集21个邮箱2个问答23个ajax特效
18 0
|
8月前
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
91 1
|
4月前
|
SQL 监控 数据库连接
实现基于内网管理监控软件的用户身份验证系统的PHP代码详解
随着信息技术的不断发展,内网管理监控软件的需求也日益增长。为了确保系统的安全性,用户身份验证成为了至关重要的一环。本文将详细介绍如何通过PHP代码实现基于内网管理监控软件的用户身份验证系统,并提供一些代码示例。
230 0