Member-only story

Capítulo 2. Lo que aprendí de DDD. Value Objects

Los Value Objects nos permiten encapsular elementos de nuestro dominio que representan un valor por sí mismos, como un email, una fecha o una puntuación.

--

Una de las ideas que más me han gustado del enfoque DDD son los “Value Objects”, los cuales nos permiten encapsular los elementos de nuestra aplicación que representan un valor por sí mismos.

La idea en la que se basan es realmente sencilla y de hecho cobra gran sentido si estamos trabajando con un lenguaje que admita Programación Orientada a Objetos. Presta atención.

Imagina una clase User con el siguiente constructor:

public function __constructor(string $email, string $fullname) 
{
...
}

Sí, está claro que $email representa una dirección de correcto electrónico, pero, ¿quién nos asegura que es un email válido? Declarando el argumento como un string plano estamos perdiendo mucho contenido semántico de ese argumento, es decir, su significado dentro de nuestra aplicación.

Sin embargo, si tuviéramos creada una clase Email a la que perteneciesen todos los objetos de tipo email que creamos en nuestra aplicación:

class Email
{
private string $value;
public function __construct(string $value)
{
$this->ensureIsValid($value);
$this->value = $value;
}
public function value(): string
{
return $this->value;
}
private function ensureIsValid(string $value): void
{
// checks and throw exception if it is not valid
}
}

El constructor de la clase User adquiriría verdadero significado cuando lo leamos:

public function __constructor(Email $email, string $fullname) 
{
...
}

Y no tendríamos que hacerla responsable de asegurar que el email es válido, sino que dicha comprobación se realizaría donde más sentido tiene: al construir un objeto de la clase Email.

Para mí esta es la mayor ventaja de la que nos proveen los Value Objects: acercar lo máximo posible las responsabilidades y la integridad de nuestros objetos

--

--

Gerardo Fernández
Gerardo Fernández

Written by Gerardo Fernández

Entre paseo y paseo con Simba desarrollo en Symfony y React

Responses (1)

Write a response