1
我在一個應用程序中使用命令模式,我有以下問題: 某些命令在執行之前需要創建另一個命令。 創建新命令的必要性取決於應用程序的狀態,所以我無法解決向隊列添加命令時是否創建新命令,但是我需要在執行它們之前解決它。 具體來說,我製作命令來控制一個策略遊戲。我有命令升級建築。它需要資源。 當資源價格高於我的存儲容量時,程序應該在實際升級建築之前解決它並插入用於升級資源存儲的命令。這就是爲什麼在將此命令添加到隊列時我無法解決升級存儲的需求,因爲該命令可能會在多天後執行,並且存儲級別會隨着時間而改變。 我唯一的選擇是在命令之前插入新命令,它需要比我的存儲空間更多的資源,並從頭開始重新啓動命令隊列,但這確實是一個非常難看的解決方案。 是否有一些設計模式僅在命令首次進入隊列時才解析命令依賴關係,並在執行該命令之前插入這些依賴關係? 我需要添加命令將存儲升級到隊列,以便在我當前沒有資源升級存儲時可以保留它們以便稍後執行。 我QueueConsumer,其中隊列處理。第邏輯是,看起來是這樣的:命令模式,需要在執行前創建新命令
public function processQueue()
{
$failedCommands = [];
$success = false;
$queue = $this->queueManager->getQueue();
foreach ($queue as $key => $command) {
foreach ($this->processors as $processor) {
if ($processor->canProcessCommand($command)) {
$success = $processor->processCommand($command);
//in the processCommandMethod I am able to resolve whether I need new commands (need to upgrade storages) or not
break;
}
}
if ($success) {
$this->queueManager->removeFromQueue($command->getUuid());
} else {
$failedCommands[] = $command;
break;
}
}
if (count($failedCommands) > 0) {
//determine when the failed commands could be processed succesfully (enough resources and so on).
}
}
我沒有明確地表達自己。我使用依賴注入容器,在服務類方面我沒有依賴關係的問題,但是我需要解決一些命令插入到隊列中的依賴關係(因爲我需要保存新添加的命令以後處理)在當前處理的命令之前並在其之前執行。 –
也許你可以將你的邏輯移動到狀態機。你可以把這些命令當作SM –
的字母表。 –