首先我们来看一下老师的要求
![7bc8d18bdb9ece1bc6044dc2046f4451.png](https://img-blog.csdnimg.cn/img_convert/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](https://img-blog.csdnimg.cn/img_convert/6fb657b8136157272f4ec30fd84981c3.png)
如图所示,这就是我们发起一个postman会经历的一个数据流转,由于我们只是模拟而已,可以在红色位置,直接echo打印信息,不继续返回下去。
讲讲会经常出错的位置,一个是数据一开始没有主要名称对应,导致传不进来,另一个是通过model处理后的数据,并没有一一对应到生成订单所需要的数据,可以通过var_dump()、print_r()和exit()强制停掉程序,来实现断点调试,毕竟我也不是学php的,真正的断点又不熟悉,只能通过这种粗暴的方式了。
以上是我写作业总结出来最后希望这篇文章对大家有所帮助,如果觉得好,点赞分享给需要的同学吧。