gpt4 book ai didi

oop - 命令设计模式中的业务逻辑

转载 作者:行者123 更新时间:2023-12-05 04:07:12 25 4
gpt4 key购买 nike

我使用命令设计模式来处理玩家 Action 。

例如,下面是处理掷骰子的命令。

interface ICommand
{
public function execute(Game $game) : void;
}

class RollDiceCommand implements ICommand
{
private $player;

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

public function execute(Game $game) : void
{
$dice = DiceFacade::roll(new NumberGenerator());

// Currently a business logic goes here

if ($dice->isDouble()) {
$player->incrementDoubleCount();

if ($player->getDoubleCount() === 3) {
$command = new GoToJailCommand();
$command->execute();

return;
}
} else {
// The next player turn
$game->nextPlayer();
}

$command = MoveForwardCommand($this->player);
$command->execute($dice->getValue());

// ...
}
}
  1. 在命令中存储额外的业务逻辑是个好主意吗?
  2. 我应该直接从 roll 命令调用另一个命令还是我需要避免它?在命令中抛出事件的想法对我来说似乎更好。你怎么看?

谢谢!

最佳答案

DDD 中最常用的命令模式形式(来自 CQRS 的一种)与 Go4 命令模式不同。它只是一个没有 execute() 方法的 DTO。

在 DDD 中,应用逻辑位于命令处理程序/应用程序服务中,而不是命令本身。

请注意,您当前在 execute() 中拥有的大部分逻辑是域逻辑,甚至不应该在命令处理程序中。 Go to jailNext playerMove forward - 这些看起来像是应该在域层中的域规则。

Should I call an another command directly from the roll command or I need to avoid it? The idea of throwing an event in the command seems better to me. What do you think about it?

这取决于您将后续行动视为主要行动的一部分还是间接后果。间接命令通常作为单独事务的一部分执行。

关于oop - 命令设计模式中的业务逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com