gpt4 book ai didi

php - 在 CQRS 中构造带有可选参数的命令对象

转载 作者:行者123 更新时间:2023-12-03 19:16:01 26 4
gpt4 key购买 nike

我的 Command对象包含 required 的组合和 optional用于构建我的 domain 的信息目的。

class Command
{
/*
| Required stuff
*/
private $req1;
private $req2;

/*
| Optional stuff
*/
private $opt1;
private $opt2;
private $opt4;

private function __construct($req1, $req1, $opt1, $opt2, $opt3)
{
$this->setReq1($req1);
// ...
}
}

对于具有大量参数(必需和/或可选)的对象,您可以使用 builder pattern而不是冗长的构造函数。我可以使用 builder对于我的 command ,但是,我不确定这是正确的方法吗?

builder pattern适合这里还是我应该简化 command更多 DTO喜欢(公共(public)属性)并执行 validationcommand handler ?或者还有其他选择吗?

最佳答案

For objects which have a large number of parameters (required and/or optional), you might make use of the builder pattern rather than having lengthy constructors. I could use a builder for my command, however, I'm not sure this is the correct approach?



您可能应该考虑 command你对 message 的态度.

消息构建器是一种方便的模式,用于将消费者与消息中可选参数的详细信息隔离开来——您的构建器可以与客户端不需要知道的合理默认值打包在一起。

请注意,这是与构造的属性应该是公共(public)的还是私有(private)的正交的问题;一旦您确定消息的属性是不可变的,公共(public)与私有(private)在很大程度上就变成了您是否需要将消费者与可能的基础数据重新安排隔离开来的问题。

Not sure what you mean when you say think about command the way you do about message?



真正的命令对象是:传递给模型的输入在内存中的表示。

常见情况:用户提交表单,通过http请求传输。有效负载(在一个抽象级别上,只是一个字节数组)被赋予特定领域的解释。通常,我们的应用层包装/转换字节数组,并将其传递给领域模型——领域模型从不看到“字节”,而是看到“值”。

但是语义是消息的语义;特别是,如果命令的原始源和域模型是可独立部署的——旧客户端尝试将命令发送到新模型,新客户端尝试将命令发送到旧模型等等,您会遇到各种兼容性问题。

处理这些问题的一种方法是将命令视为弱模式消息。许多可选字段,如果缺少可选值,则采用默认值。 Builder模式非常适合这种方法 - 构建器知道所有默认值,跟踪客户端已提供默认值覆盖的情况。

关于php - 在 CQRS 中构造带有可选参数的命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48589191/

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