{adriNcode}

Value Objects

imagen value objects

¿No te pasa que a veces en tu código tenés que trabajar con datos simples como coordenadas, cantidades de dinero, o direcciones, y terminas repitiendo lógica y validaciones en varios lugares? O peor aún, ¿cambias un valor en una parte del código y accidentalmente afecta otra parte que no esperabas?

Value Objects

Los Value Objects solucionan este problema al agrupar atributos relacionados en un solo objeto inmutable. Esto asegura que el objeto se comporte de manera consistente en todo el sistema, evitando errores y duplicaciones.

Value Objects son tipos de datos en programación que se definen únicamente por sus atributos. No tienen una identidad de tipo ID como un objeto tradicional su identidad esta basada en su valor. Se utilizan para representar conceptos que no necesitan un identificador único.

Comparaciones en la Vida Real

Para entender mejor los Value Objects, puedes compararlos con:

  • Billetes de Dinero: Un billete de $20 es intercambiable por cualquier otro billete de $20. Su valor se define por la cantidad de dinero, no por el billete en sí.

  • Tazas de Medida: Dos tazas medidoras de “1 taza” pueden ser usadas indistintamente, su valor se define por la medida, no por la taza en sí.

Ejemplo en Código

Aquí tienes un ejemplo simple en Dart para un Value Object que representa una dirección:

import 'package:equatable/equatable.dart';

class Address extends Equatable {
  final String street;
  final String city;
  final String postalCode;

  Address(this.street, this.city, this.postalCode) {
    if (postalCode.length != 5) {
      throw ArgumentError('El código postal debe tener exactamente 5 caracteres.');
    }
  }

  @override
  List<Object> get props => [street, city, postalCode];

  @override
  String toString() => '$street, $city, $postalCode';
}

void main() {
  try {
    final address = Address('Calle Principal 123', 'Ciudad', '12345');
    print(address);
  } catch (e) {
    print('Error: \$e');
  }

  try {
    final invalidAddress = Address('Calle Secundaria 456', 'Otra Ciudad', '123');
    print(invalidAddress);
  } catch (e) {
    print('Error: \$e');
  }
}

Leer Siguiente

Suscribirse a {adriNcode} Newsletter

Exploraremos juntos el mundo de la programación. Recibirás información desde los fundamentos hasta los conceptos más avanzados.