促销模块

电商的促销模块,抽象出来。有两个,规则和行为。

比如,后台发布一个促销活动,满足一定的条件,执行相对应的行为。

比如,买A赠B

1规则

买A

if(买A==true){

}

2 行为

赠B

if(买A==true){
    execute('赠B')
}

促销活动Promote 有一个Rule,满足了Rule后,去执行相应的行为Action

有一些促销活动没必要拆分RuleAction,比如满100减30或者打8折活动,因为是作用于整单的没有其它条件。对于购A赠B来说,是满足某一特殊条件,条件和行为是必须分离的。

因此对于Rule来说自己本身可有Action

3 Rule和Action什么时候分离

  • 有一般条件的 RuleAction 不分离

  • 有特殊条件的 RuleAction 分离

写了一个包

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
通过规则,打八折
执行行为,订单打八折

Posted in php, 后端 on Nov 02, 2019

请登录 登录 评论!