php - 应用程序中管道/阶段的设计模式

标签 php algorithm oop laravel design-patterns

在我的申请中,有一些潜在客户必须经历的阶段。

例如:

New
In Progress
Won
Lost

这些只是 11 个阶段中的四个阶段。在每个阶段,都会有一些必须执行的操作。

例如,一个线索从新的移动到进行中,我需要更新四个表中的一组特定值。

我可以在这里使用什么理想的设计模式,以便将来如果有任何新阶段出现,可以很容易地在代码中适应它?

我在考虑使用工厂模式。

编辑: 我做了这样的事情:

interface StageInterface
{
    public function changeStage($previous_stage, $next_stage, $ticket_details);
}

abstract class ParentStage implements StageInterface
{
    public function changeStage($previous_stage, $next_stage, $ticket_details)
    {
        $ticket_details->stage_id = $next_stage;
        $ticket_details->save();

        return $this;
    }
}

Class InProgress extends ParentStage
{
}

class TicketStagesFactory
{
    protected $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function getObject()
    {
        switch ($this->data) {

            case Stage::IN_PROGRESS:
                return new \App\Http\Controllers\Stages\InProgress();
                break;
     }
}

然后我像这样使用工厂:

$factory = new TicketStagesFactory($next_stage);
$test = $factory->getObject()->changeStage($previous_stage, $next_stage, $ticket_details);

这是正确的做法吗?

最佳答案

这实际上看起来更像是一个工作流程。 状态机更像这样工作: 对于一个状态,一个事件会导致它转换到另一个状态。 工作流程更像您所说的那样: 对于一个状态,必须执行 Action ,这些 Action 的结果决定下一个状态。

我会寻找 php 的工作流引擎,使您的工作可维护。

关于php - 应用程序中管道/阶段的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053247/

相关文章:

php - 将表中的行复制到具有不同 id 的同一个表中

php - 检测 Mac 用户 - htaccess

c - QuickSort 中的分割

c++ - 如何让非全局对象在函数内进行交互?

javascript - 滚动时新的 ajax 请求

php - dd/mm/yyyy 的正确正则表达式日期模式

algorithm - 从有限值列表中寻找目标值的组合算法

java - 着色高度图的面而不是顶点

c++ - UML 类图的表示法

python - 类中的函数实例变量