Member-only story

Capítulo 3. Lo que aprendí de DDD. Entidades

Gerardo Fernández
8 min readJun 15, 2021

--

Ahora que ya sabemos cómo trabajar con Value Objects, veamos el otro concepto fundamental de nuestro dominio: las entidades

En el capítulo anterior repasé el patrón Value Object para modelar los elementos de nuestro dominio que representan valores, como un precio o un rango de fechas.

Sin embargo, otros elementos de nuestro dominio pueden tener un carácter único, como una persona, una orden de compra o una factura, es decir, representan entidades únicas de nuestra aplicación.

Simplificando mucho esta idea, una entidad vendría a ser una tabla de nuestra base de datos (si estamos empleando un sistema relacional). Yo prefiero entender el concepto entidad como un elemento que posee identidad propia por sí mismo junto con una serie propiedades que pueden variar a lo largo del tiempo.

Identidad

Supongamos que tenemos definida la siguiente clase básica de PHP para representan a la entidad Person de nuestro dominio:

class Person
{
private int $id;
private string $name;
private string $surname;
public function __construct(
int $id,
string $name,
string $surname
) {
// ...
}
// getters and setters
}

Lo que diferencia a un objeto de la clase Person de otro es su campo $id , el cual tiene un valor único a lo largo de toda la aplicación. Da igual que este campo sea, como en el ejemplo, un número, lo importante es que posee un carácter único que sirve para identificar inequívocamente al objeto que representa.

❗️ Importante. Puede que estemos acostumbrados a especificar los identificadores como números, pero también pueden ser sin problema cadenas de texto como uuids o casos más concretos como el ISBN de un libro o el DNI de una persona. Lo crucial es que estemos seguros de que no se producirán colisiones.

Y ahora que conocemos el poder de los Value Objects, ¿por qué no representarlos mediante ellos?

class Person
{
private PersonId $id;
private string $name;
private string $surname;
public function __construct(
PersonId $id,
string $name,
string $surname
) {
// ...
}

--

--

Gerardo Fernández
Gerardo Fernández

Written by Gerardo Fernández

Entre paseo y paseo con Simba desarrollo en Symfony y React

Responses (4)

Write a response