Inicio » Comunidad » ¿Qué son los value objects?

¿Qué son los value objects?

0
0

Uno de los patrones más útiles en mi día a día son los value objects. Los value objects (VO) son objetos que se identifican por su contenido y nos ayudan a modelar conceptos de negocio.

Las principales características de un VO son:

  • Respetan el principio de cohesión y encapsulamiento de responsabilidades.
  • Soluciona Primitive Obsession
  • Inmutabilidad
  • No tienen identidad

¿ En qué situaciones se suelen utilizar?

Hay muchas situaciones en la que podemos utilizar los value objects, pero principalmente destacaría dos: Por un lado para mantener la inmutabilidad en lenguajes funcionales y por otro cuándo se quiere encapsular lógica de validación de un concepto de negocio que no puede residir en la entidad. Por ejemplo, imagina que quieres crear una aplicación que te permita dar de alta usuarios, dichos usuarios deberán tener un id, email y nombre como atributos. Cada atributo deberá contener su lógica de validación, con lo cual, utilizaremos el patrón value object para encapsular la lógica. Esto nos permite eliminar los servicios genéricos como el típico user service y respetar las características mencionadas anteriormente obteniendo un código mucho más testeable y alineado a los principios SOLID.

A continuación podemos ver un ejemplo de cómo implementar el value object del atributo nombre en el lenguaje C#

    public sealed class UserFirstName : ValueObject
    {
        public const int MIN_LENGTH = 3;
        public const int MAX_LENGTH = 40;

        public UserFirstName(string value) : base(value)
        {
            if (value.Length < MIN_LENGTH)
            { 
                throw InvalidAttributeException.FromMinLength("first name", MIN_LENGTH); 
            }
 
            if (value.Length > MAX_LENGTH)
            {
                throw InvalidAttributeException.FromMaxLength("first name", MAX_LENGTH);
            }
        }
    }

Si deseas ver este ejemplo en otros lenguajes haz clic aquí.

0 resultados
Tu respuesta

Por favor, primero debes para enviar.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad