0

假设我有一个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)
    {
        ...
}

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

4

1 回答 1

1

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

小缺点。

缺点#1 - 你增加了一个(小)额外的工作步骤。如果我想要一个用户,我首先必须得到一个 CreateUser 命令。所以有一个额外的步骤会阻碍。

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

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

想要一个接受 CreateUser 并返回 User 的函数是完全合理的。您希望该功能接近用户甚至是合理的。

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

于 2020-10-31T13:54:04.127 回答