Especificaciones
Suele tener una complejidad baja salvo excepciones muy puntuales, ya que sólo valida que su información es consistente y alguna operación que lo modifique. Con lo que le damos una complejidad de 1.
Su principal habilidad es contener pequeñas unidades de información y que cumplan sus reglas.
Los Value objects son fáciles de diferenciar de los Aggregates porque no tienen un identificador que los haga únicos. Aparte contienen uno o más primitivos.
Como característica remarcable, cabe decir que son inmutables. Eso quiere decir que si se intenta alterar el contenido del Value object, nos devolverá un Value object nuevo. Esto se hace para evitar los llamados “side effects”, porque podemos enviar un valor a través de las funciones u otros objetos y podría ser alterado sin nuestro conocimiento.
Se relaciona con los que lo contienen, que pueden ser Aggregate root, Aggregate y otros Value objects.
¿Qué valor me aporta implementar un Value object?
Al ser la pieza más pequeña del Domain, también es el responsable de definir las pequeñas reglas que existen en dicho Domain.
- Por un lado, todas esas pequeñas normas y validaciones que podrían parecer un grano de arena, en un desarrollo iterativo e incremental, a medida que el sistema se vuelve más complejo o maduro, se vuelven una montaña.
- Por otro lado, si se define una regla de Domain nueva que afecta a un Value object, ya tenemos el objeto candidato a centralizar dicha verificación.
- También mantiene a raya el uso de librerías en nuestro Domain. Si necesitamos una librería que nos gestione temas complejos, como validad un NIF, nuestro Value object actuará de wrapper para envolver dicha dependencia, y si en un futuro queremos cambiar de librería o implementar directamente la validación, sólo tendremos que cambiar una sola clase en toda la aplicación.
¿Un Value object puede contener otros Value objects?
Pues la verdad es que si. La idea es que siempre vayamos pasando valores con un tipado fuerte para evitar bailes de parámetros en funciones y tener las pequeñas validaciones ubicadas en su lugar correcto, que son los Value objects.
¿Cómo se expresa esta carta en el mundo real?
Como indica el icono de arriba a la izquierda, corresponde a una clase.
Lo ideal es que sea una clase sin herencia, ya que cada Value object, aunque contenga primitivos, tendrá sus propias normas y operaciones.
|
|