在CQ(R)S中,可以使用命令作为模型构造函数的参数吗



假设我有一个CreateUser命令:

class CreateUser
{
public string $email;
public string $password;
public string $firstName;
public string $lastName;
public LocalDate $dateOfBirth;
public ?string $location;
}

如果我的User模型接受这个命令作为构造函数参数,可以吗?

即,而不是这样:

class User
{
public function __construct(
string $email,
string $password,
string $firstName,
string $lastName,
LocalDate $dateOfBirth,
?string $location
) {
...

让命令处理程序将命令数据映射到模型,我可以简单地让模型构造函数接受命令作为参数,并提取他们需要的数据:

class User
{
public function __construct(CreateUser $command)
{
...
}

这是一种正确的方法,还是有缺点?

这是一种正确的方法,还是有缺点?

小缺点。

缺点#1-你增加了一个(小(额外的工作步骤。如果我想要一个用户,我首先必须获得一个CreateUser命令。因此,还有一个额外的步骤。

缺点#2-因为你需要一个CreateUser,所以你需要User的所有字段的值,以及用户不关心的所有额外字段的值。

例如,假设您稍后决定CreateUser应该具有messageId。现在,想要一个User的代码路径需要发明一个他们不想要的messageId,以便构造一个他们并不想要的CreateUser,这样他们就可以构造他们想要的User。

想要有一个接受CreateUser并返回User的函数是完全合理的。您甚至可以合理地希望该函数接近User。

不过,您可能不希望该函数是__construct。静态辅助方法可能是一个更健康的长期解决方案。

最新更新