JeuWeb - Crée ton jeu par navigateur
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)

Pages : 1 2 3 4 5 6 7 8


RE: Valueobject - Max72 - 06-09-2015

J'ai enfin compris Wink

J'avoue qu'à ce niveau je ne vois pas comment j'implémenterai de solution propre avec des VO.
A la limite un UPDATE en BDD et refresh de la page, pas génial mais c'est tout ce que j'ai sur le moment Wink

Mais remettons chaque chose à sa place : Si mon jeu était autant porté sur la géographie (pays, villes ,...), je n'utiliserait pas de simples VO pour traiter tout ça, j'imagine que chacune de mes classes possèderaient des tas de méthodes et des setters.
Un Value Object doit rester simple, et si ton jeu tourne autour des monnaies, devises etc, tu n'utiliseras pas ce pattern pour les représenter, mais des objets bien plus complexes.


RE: Valueobject - niahoo - 06-09-2015

oui là on est clairement pas dans un cas d'utilisation de valuebjects mais de models


RE: Valueobject - srm - 07-09-2015

Tout à fait tout comme parler de valueObject au niveau base de données n'a pas vraiment de sens.


RE: Valueobject - Xenos - 07-09-2015

Ok, donc le caractère Immutable est surtout là pour assurer la notion de "copier/coller" (je sais pas trop comment la reformuler, celle sur ce post de SO me semble parfaitement décrite), pour éviter de "partager" une data entre deux autres entités (dans les faits, le même VO peut être utilisé mais sa 'modif' ne doit pas se répercuter à tous ceux qui l'utilisent).
C'est un peu comme si les VO étaient toujours retournés/passés par copie, c'est ça?


RE: Valueobject - Max72 - 08-09-2015

C'est ça.

Le Value Object force à créer 2 objets distincts pour 2 entités (personnages par exemple) qui auraient les mêmes attributs (adresse), afin justement de ne pas avoir de répercussions indésirées, comme par exemple :
Code PHP :
<?php


class Adress
{
   public $value;
   
   public
function __construct($value)
   {
       $this->value = $value;
   }
}

class
Person
{
   public $adress;
}

$adress = new Adress('44 route de la mairie');
$bob = new Person();
$jeanne = new Person();

$bob->adress = $adress;
$jeanne->adress = $bob->adress;

$bob->adress->value = '5 Rue de Jean Bobine';

echo
$jeanne->adress->value;
// 5 Rue de Jean Bobine

Ici on donne à Bob et Jeanne la même adresse, mais si Bob déménage, Jeanne suit..

En supprimant la possibilité de modifier l'adresse de Bob (setter sur la value), on oblige à créer un nouvel objet adress pour déménager Bob. Et là, Jeanne ne quitte plus les lieux, même si on a partagé la même adress pour les 2 Smile