php的类图怎么生成_必看!如何最简单完成老师的php作业

首先我们来看一下老师的要求

7bc8d18bdb9ece1bc6044dc2046f4451.png

谈谈我的理解,首先1、4、5、6就不用多说了,商业逻辑因人而异,后面几点基本都是废话,我们重点讲讲2、3。

首先,老师的作业充其量只能写个接口模拟一下商业逻辑,提到了model和代理模式,其实很好理解,我们最好把我们商业逻辑的代码实现统一放在一个model里面,再使用一个Proxy来代理这个model,这样代码初步结构我们就可以定下来了。

需要3个文件,来实现代理模式(链接)

共同实现的接口.php(定义好功能的函数)

委托类.php(实现接口,完成功能的主要逻辑,也就是xxxmodel.php)

代理类.php(实现接口,代理委托类,也就是xxxProxy.php)

单单这样,就有些千遍一律了,那想想还有什么模式可以用,我想到一个简单的抽象工厂模式可以用在生成订单上,所有的订单都通过这个工厂生成。那怎么使用呢?既然为抽象工厂,那就应该要有AbstractFactory.php(抽象类),orderFactory.php(实体类)。

接下来就是重头戏了!!!

通过代码来演示一下,以满减为例,代理模式部分的请看作业要用设计模式?

//抽象工厂类
abstract class AbstractFactory{
    function 满减订单($member, $sg, $num, $price);
}
//实体工厂类
require_once 'ImportOrder.php';
require_once 'OrderFactory.php';
class OrderFactory extends AbstractFactory{
    function 满减订单($member, $sg, $num, $price)
    {
        $time = time();
        $goods =[[
            'order_id'=>$time,
            'goods_name'=>$sg[0]['goods_name'],
            'barcode'=>'20201111',
            'goods_number'=>$num,
            'goods_fee'=>($sg[0]['price']*$num),
        ]];
        $data = [
            'order_id'=>$time,
            'order_no'=>'O'.$time,
            'person_name'=>$member[0]['name'],
            'person_tel'=>'15000000000',
            'person_idcard'=>'550555199901010101',
            'order_fee'=>($sg[0]['price']*$num-$price),
            'sg_id'=>$member[0]['saler_id'],
            'order_time'=>$time,
            'discount_fee'=>$price,
            'fee'=>$sg[0]['price']*$num,
            'num'=>$num,
            'member_id'=>$member[0]['member_id'],
            'saler_id'=>$sg[0]['saler_id'],
            'goods'=>$goods,
        ];
        return (new ImportOrder())->createOrder($data);
    }
}

接下来,只要我们在委托类中使用这个订单工厂,即可生成满减订单,传入的参数分别为:

$member:查询要的会员信息

$sg:查询到的商品信息

$num:购买的数量

$price:满减,减的金额

class xxxmodel implements xxx{
    function manjian($member_id, $sg_id, $num){
     //在里面完成你的逻辑,然后把参数传递给工厂,由工厂生成,接收返回值
     ......
     $result = (new OrderFactory())->满减订单($member, $sg, $num, $price)
         if ($result){
            return true;
        }else{
            return false;
        }
    }
}

到这里基本就已经完成了,剩下的只是细节的调整,以及调通整个逻辑是否完整,接下来讲一下信息的传递。

6fb657b8136157272f4ec30fd84981c3.png

如图所示,这就是我们发起一个postman会经历的一个数据流转,由于我们只是模拟而已,可以在红色位置,直接echo打印信息,不继续返回下去。

讲讲会经常出错的位置,一个是数据一开始没有主要名称对应,导致传不进来,另一个是通过model处理后的数据,并没有一一对应到生成订单所需要的数据,可以通过var_dump()、print_r()和exit()强制停掉程序,来实现断点调试,毕竟我也不是学php的,真正的断点又不熟悉,只能通过这种粗暴的方式了。


以上是我写作业总结出来最后希望这篇文章对大家有所帮助,如果觉得好,点赞分享给需要的同学吧c998f1ac685d11231e4a25bd2a66dcfb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值