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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class MapperClient extends mapper {...}
class client extends domainObject {...}
ou pour les fournisseurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class MapperFournisseur extends mapper {...}
class fournisseur 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
3
4
 
$mc = new MapperClient();
$obj = new client();
$mc->Load($client, $id_du_client);
c'est relou, mais je code SOLID en séparant bien les rôles des class et j'évite les méthodes statics.

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
abstract public function Load(domainObject $obj, $id);
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
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.