促銷模組

jcc123發表於2019-11-03

電商的促銷模組,抽象出來。有兩個,規則和行為。

比如,後臺釋出一個促銷活動,滿足一定的條件,執行相對應的行為。

比如,買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
透過規則,打八折
執行行為,訂單打八折
本作品採用《CC 協議》,轉載必須註明作者和本文連結
NOT IS BECAUSE I WANT TO WRITE, BUT I WANT TO INCREASE, SO I GO TO WRITE~~

相關文章