假设我有一个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。静态辅助方法可能是一个更健康的长期解决方案。