Valueobject - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Valueobject (/showthread.php?tid=7392) |
RE: Valueobject - Xenos - 08-06-2015 > se compare à lui même, tout comme + qui s'additionne à lui même dans mon exemple. Perso, je n'ai pas de raison d'interdire Pomme + Banane = Fruits (si c'est utile). Mais la question était plus centrée sur la loi de composition interne, c'est à dire de Pomme(3) + Pomme(2) = Pomme(5) (c'est [url=http://fr.wikipedia.org/wiki/Loi_de_composition_interne}la définition d'une telle loi[/url]). J'ai du coup encore moins de raison d'interdire Pomme + Pomme ^^ D'ailleurs, si Argent{100,$}+Argent{200,€}=exception pour toi, alors Argent+Argent=Exception ? et donc ValueObject+ValueObject=Exception quelque soit le valueobject? Ou c'est juste Exception parce que les monnaies diffèrent? RE: Valueobject - Ter Rowan - 09-06-2015 a partir du moment ou on peut additionner des types natifs, je ne vois pas pourquoi on ne pourrait pas le faire avec les valueobjects int + float string + int etc.. pour faire cela il faut juste développer les conversions qui vont bien et du coup si pomme et banane on un pgcc (plus grand commun conversion, oui je viens d'inventer) alors banane + pomme = quelque chose si par contre on n'a aucune conversion disponible alors exception RE: Valueobject - srm - 09-06-2015 J'en ai discuté avec plusieurs personnes de cette histoire Pomme + Poire = Fruit(2) Pour tous la réponse a été non. Que ça n'avait pas spécialement de sens, mais plus encore pas d'intérêt. J'ai pourtant fait l'avocat du diable en essayant d'y montrer l'intérêt. Mais au final je ne vois pas déjà en pratique quand ça servirait, vous avez des cas ? RE: Valueobject - Xenos - 09-06-2015 Initialement, je parlais de Pomme+Pomme qui peuvent s'additionner différemment. Mais dans le cas de Pomme+Poire, l'exemple de Ter Rowan est pertinent: int+double (ou tout autre A+B avec A et B partageant des relations d'héritage). Un cas d'utilisation pourrait donc être {Entier}+{Fraction}={Fraction} ou {Complexe}+{Fraction réelle}={Complexe} Plus généralement, tout cas où on aurait un cast implicite: (X)A+(X)B=X RE: Valueobject - niahoo - 09-06-2015 (09-06-2015, 02:57 PM)srm a écrit : J'en ai discuté avec plusieurs personnes de cette histoire Pomme + Poire = Fruit(2) 5 fruits et légumes par jour ! RE: Valueobject - Max72 - 02-09-2015 Plop ! Petit déterrage pour vous montrer comment moi j'implémente mes value objects. On pourrait faire plus,mais y'a tout pour comprendre, si ça intéresse encore quelqu'un : https://gist.github.com/Max-koder/224c1488db1e05c54755 RE: Valueobject - Xenos - 02-09-2015 Coté code, tu peux alléger fusionner les if ( ... instanceof ...) suivit d'un return : return (... instanceof... && <<le return existant); Egalement, pourquoi avoir redéfini les __set(), surtout sans rien y faire? Perso, je n'y aurai pas touché, à défaut, j'aurai levé une exception (là, "$myValueObject->mesgenoux = 2" ne lèvera aucune erreur, mais ne fera rien). Coté business, les rues sont comparées par nom... Mais quid de deux rues du même nom dans deux villes différentes? Elles seront considérées comme 'isEqual()'... RE: Valueobject - Max72 - 02-09-2015 Pour les if etc, c'est voulu, cas pédagogique. Ensuite, je défini les __set pour éviter une fatal error (accès à une propriété privée), pas certain que ce soit une bonne idée mais bon.. Enfin : Oui les rues et villes sont comparées par nom (il pourrait y avoir 2 villes avec le même nom), parce que ça m'importe peu. Le fait de tester la rue sert uniquement dans le test d'une adresse complète dans mon cas, et même dans la réalité je ne vois pas l'utilité. Par exemple avec une localisation, si la longitude est la même, ça ne signifie pas que la localisation soit la même, la latitude peut-être différente, ça reste quandmême la même longitude En fait ce code est sorti du contexte: j'essaye d'écrire un billet sur ce thème, voilà pourquoi le code n'est pas optimal mais plus 'démonstratif'. RE: Valueobject - niahoo - 02-09-2015 Sympa. Effectivement, plutôt qu'une interface, je ferais plutot une abstract class avec une exception dans la méthode __set . Sinon, c'est cool.Tiens, ça me donne envie de montrer les protocoles elixir RE: Valueobject - Xenos - 02-09-2015 Citation : Je défini les __set pour éviter une fatal error (accès à une propriété privée), pas certain que ce soit une bonne idée mais bon..Je te confirme: c'est une mauvaise idée. Masquer les erreurs ainsi, c'est autoriser leur démultiplication et la mort direct du projet quand ces erreurs seront nombreuses et surtout impistables (mais mais! mon code fait n'importe quoi! pourtant y'a pas d'erreur...) Citation :Par exemple avec une localisation, si la longitude est la même, ça ne signifie pas que la localisation soit la même, la latitude peut-être différente, ça reste quandmême la même longitude Oui, dans le cas de la longitude, je suis d'accord car deux valeurs de longitude égales, c'est deux longitudes égales (en partant du postulat qu'on ne considère qu'une seule planète). Dans le cas des rues, c'est différent: deux rues de même nom sont deux entités différentes. Là, c'est pour moi, c'est comme si tu comparais deux billets sur la base de leur seule valeur faciale: deux billets de 100 ne sont pas forcément les mêmes car la monnaie (ou la ville) peut différer. Après, faut juste que ce soit clair dans le commentaire. "sont considérés comme égaux", c'est léger, et cela devrait être détaillé dans l'implé de chaque méthode. |