Bonjour,
Je voudrais réaliser un objet abstrait mapper dont héritera tous les objets destinés a la gestion de la persistance des données. J'ai à coté de ça une classe abstraite domainObject dont hérite tous les objets métier.
Si on prend par exemple une table client, relative à l'objet client, on a donc
ou pour les fournisseurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class MapperClient extends mapper {...} class client extends domainObject {...}
A l'usage, dans le code, l'instanciation d'un client d'ID $id_du_client se fait comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 class MapperFournisseur extends mapper {...} class fournisseur extends domainObject {...}
c'est relou, mais je code SOLID en séparant bien les rôles des class et j'évite les méthodes statics.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $mc = new MapperClient(); $obj = new client(); $mc->Load($client, $id_du_client);
Voilà pour le préambule. Maintenant, la méthode Load est définie comme méthode abstraite dans mapper. Actuellement, je la définie comme suit :
or, il est bien évident qu'au moment de la définition de cette méthode dans chacune des class dérivées, $obj ne sera plus de type domainObjet mais d'un type qui en dérive. Concrètement, pour MapperClient, j'écrirais alors :
Code : Sélectionner tout - Visualiser dans une fenêtre à part abstract public function Load(domainObject $obj, $id);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 class MapperClient extends mapper { public function Load(client $client, $id) {...} }
Pour moi, cela ressemble à une surcharge plutot qu'a une re-définition... Donc est-ce que cela est sémantiquement et philosophiquement correct en POO, ou faudrait-il continuer à définir $client comme un domainObject ? ou autre chose ?
En vous remerciant.
Partager