Featured image of post Primary card - Command

Primary card - Command

Es el mensaje que entiende el dominio.

Especificaciones

Se diferencia de la Query sólo en la intención del Use case que lo va a gestionar. En este caso, los Commands buscan modificar información del dominio.

Command Primary reverse

Tiene una complejidad tirando a nula, pero le ponemos un 1, ya que es el valor mínimo.

Como principal cometido, representa la información que ha solicitado modificar el usuario al dominio.

Si tuviéramos que comentar sus características más concretas, diríamos que es un DTO. Eso implica que carece de lógica, contiene datos primitivos y es inmutable. Y también, en estos casos sólo contiene valores primitivos.

Se relaciona con el Command REST controller que es el que lo crea, y el Command use case, que es el que lo recibe.

Como observaciones, siempre necesita tener un Query use case que lo pueda gestionar en exclusiva. Si hubiera más de uno, nuestra aplicación debería fallar.

¿Qué valor me aporta implementar un Command?

  • Como DTO, establecerá las reglas principales a nivel de valores primitivos y la cantidad de información que necesita el mensaje para ser útil al Domain. Jugará un papel clave a la hora de que el Command use case pueda hacer su trabajo.
  • Habilita la posibilidad de usar un Bus para agregarle funcionalidad al Command use case a través de middlewares, como logging o transaccionalidad.

¿Cómo se expresa esta carta en el mundo real?

Como indica el icono de arriba a la izquierda, corresponde a una clase.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
final class SignUpUserCommand
{
    private function __construct(
        private readonly string $username,
        private readonly string $email,
        private readonly string $password
    ){}

    public static function build(string $username, string $email, string $password): SignUpUserCommand
    {
        return new SignUpUserCommand($username, $email, $password);
    }

    public function username(): string
    {
        return $this->username;
    }

    public function email(): string
    {
        return $this->email;
    }

    public function password(): string
    {
        return $this->password;
    }
}
Licensed under CC BY-NC-SA 4.0
Creado con Hugo
Tema Stack diseñado por Jimmy