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…