Featured image of post Primary card - Query

Primary card - Query

Es el mensaje que entiende el dominio.

Especificaciones

Se diferencia del Command sólo en la intención del Use case que lo va a gestionar. En este caso, las Querys buscan información del dominio sin alterar su contenido.

Query 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 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 Query REST controller que es el que lo crea, y el Query 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 una Query?

  • 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 Query use case a través de middlewares, como logging.

¿En el caso de la Query, realmente es una ventaja usar un Bus?

// TODO

¿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
final class LoginUserQuery
{
    private function __construct(
        private readonly string $username,
        private readonly string $password
    ){}

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

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

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