促销模块
电商的促销模块,抽象出来。有两个,规则和行为。
比如,后台发布一个促销活动,满足一定的条件,执行相对应的行为。
比如,买A赠B
1规则
买A
if(买A==true){
}
2 行为
赠B
if(买A==true){
execute('赠B')
}
促销活动Promote
有一个Rule
,满足了Rule
后,去执行相应的行为Action
。
有一些促销活动没必要拆分Rule
和Action
,比如满100减30或者打8折活动,因为是作用于整单的没有其它条件。对于购A赠B来说,是满足某一特殊条件,条件和行为是必须分离的。
因此对于Rule
来说自己本身可有Action
3 Rule和Action什么时候分离
-
有一般条件的
Rule
和Action
不分离 -
有特殊条件的
Rule
和Action
分离
写了一个包
Installing
$ composer require jc91715/promote -vvv
Usage
<?php
require_once('./vendor/autoload.php');
use Jc91715\Promote\PromoteManage;
use Jc91715\Promote\Promote\AbstractPromote;
use Jc91715\Promote\Rule\abstractRule;
use Jc91715\Promote\Action\ActionInterface;
class Promote extends AbstractPromote
{
}
class Rule extends abstractRule
{
public function across()
{
echo "通过规则,购A\n";
return true;
}
}
class Rule1 extends abstractRule
{
public function across()
{
echo "通过规则,打八折\n";
return true;
}
public function execute()
{
echo "执行行为,订单打八折\n";
}
}
class Action implements ActionInterface
{
public function execute()
{
echo "执行行为,赠B\n";
}
}
//特殊规则Rule和Action分离
$promote = new Promote();
$rule = new Rule();
$action = new Action();
$promote->addRule($rule);
$promote->addAction($action);
//一般规则只有Rule
$promote1 = new Promote();
$rule1= new Rule1();
$promote1->addRule($rule1);
$promoteManage=new PromoteManage();
$promoteManage->addPromote($promote);
$promoteManage->addPromote($promote1);
$promoteManage->apply();
输出
通过规则,购A
执行行为,赠B
通过规则,打八折
执行行为,订单打八折
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: