在我的申请中,有一些潜在客户必须经历的阶段。
例如:
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/