05-09-2015, 12:50 PM
Je ne suis effectivement pas convaincu car, mis à part le fait que j'aurai utilisé une interface Temperature et non une classe abstraite, il faut faire la conversion à la main dans le code utilisateur.
De plus, puisque tu parles de monnaie, comment vas-tu faire pour implémenter un système où la monnaie est une donnée? Par exemple, si les joueurs peuvent créer leur propre monnaie dans le jeu, tu ne peux pas avoir 1 classe par monnaie: il te faudra forcément une classe générique à toutes les monnaies. Du coup, si j'ai {100;€} et {130;$}, comment savoir si cela représente la même somme d'argent?
Je suis d'accord avec la définition du DTO. La définition de base "Une classe est un ValueObject si et seulement si deux instances différentes A et B de cette classe peuvent être égales" (peu importe la condition d'égalité) me convient. Le caractère Immutable, à la limite bon. Mais "toCelsius" et "toFahrenheit" (voire "toKelvin", "toReaumur", "toLeiden"...), ce ne sont pas des comportements?
Demandé autrement: quelle différence entre DTO Immutable, ValueObject, et Object?
De plus, puisque tu parles de monnaie, comment vas-tu faire pour implémenter un système où la monnaie est une donnée? Par exemple, si les joueurs peuvent créer leur propre monnaie dans le jeu, tu ne peux pas avoir 1 classe par monnaie: il te faudra forcément une classe générique à toutes les monnaies. Du coup, si j'ai {100;€} et {130;$}, comment savoir si cela représente la même somme d'argent?
Citation :Si tu as besoin de le muter, modifier, avoir un tas de méthode, c'est que tu n'as pas besoin d'un VO, mais d'un objet tout court.C'est vrai. Donc un ValueObject peut évoluer en Object normal?
Je suis d'accord avec la définition du DTO. La définition de base "Une classe est un ValueObject si et seulement si deux instances différentes A et B de cette classe peuvent être égales" (peu importe la condition d'égalité) me convient. Le caractère Immutable, à la limite bon. Mais "toCelsius" et "toFahrenheit" (voire "toKelvin", "toReaumur", "toLeiden"...), ce ne sont pas des comportements?
Demandé autrement: quelle différence entre DTO Immutable, ValueObject, et Object?