Value object
En el modelo Value Object, un objeto se diferencia de otro por su contenido, no por su identidad propia.
Podemos entender el concepto de Value Object con el ejemplo de las monedas. Aunque cada moneda de 1 euro tiene su propia identidad (un número de serie), la economía funciona porque entiende que una moneda de 1 euro es igual que otra moneda de un euro, ambas valen lo mismo y a efectos prácticos son iguales.
function createCoin() {
return {
value: 1
}
}
Los estados en un modelo Value Object son inmutables. Si queremos cambiar una característica, crearemos un nuevo objeto con esa característica, en lugar de ir modificando los estados de un único objeto. Un objeto que tiene variables de estado y que nunca cambia se llama objeto inmutable. Por lo tanto, utilizaré el modelo de Value Object cuando tenga sentido crear nuevos objetos en lugar de confiar en un único objeto e ir cambiando su estado.
String en JS es un objeto inmutable y lo tratamos como Value Object. Por ello, todos los métodos que se aplican sobre string generan un nuevo string y no modifican el original.
var string = 'Hello”;
string.replace(“H”, “x”); /*xello*/
string /*Hello*/
Entity object
Este tipo de objetos se comparan en función de su identidad. Son iguales si tienen la misma identidad, sin importar el contenido o valor. También es usual encontrarlos con atributos de identificación.
En este modelo, el objeto tiene una identidad única e irrepetible. Además, el modelo permite que el estado del objeto vaya cambiando a lo largo del tiempo. Por lo tanto, aquello que tiene sentido que mute a lo largo del tiempo, suele implementarse como Entity Object.
function user() {
let id = Math.random();
let age = 23;
return {
getAge: function() {
return age;
},
birthday: function() {
++age;
},
getId: function() {
return id;
}
}
}