Bonjour,

Je rencontre actuellement un problème de taille (qui risque de ne pas être spécifique au Java prochainement).
Cela fait un certain temps que je développe un ORM en PHP composé de diverses classes (forcément) et vu que le système marche de mieux en mieux je souhaite le transposer en Java. Ceci dans le but de l'implanter à la fois côté serveur en J2EE et côté client comme j'essaye de le faire maintenant.

J'en entends déjà certains beugler au dernier rang sur le côté laxiste de PHP mais je suis justement disposé à travailler avec plus de rigueur avec Java.
N'hésitez donc pas à me dire ce qui ne va pas dans mes concepts, puisque ça viens surement de là.

Basiquement, j'ai crée une classe de base qui contiens divers traitements sur les données chargées (les préparations de la lecture, de l'écriture et de la suppression).
Cette classe peut-être étendue par d'autres classes (qui peuvent elles-mêmes être étendues et ainsi de suite).
Jusque là elle sont toutes abstraites. Seule la classe en bout de chaine d'extension est instanciable.
Pour accéder aux données, ces classes instanciables doivent disposer obligatoirement de deux éléments : une configuration (le nom de la table dans laquelle taper par exemple) et surtout un driver.
Ce driver me donne la capacité de charger des données depuis une base SQL, depuis un fichier ou bien depuis tout ce qu'on veut. C'est donc dans le driver MySQL que se situent véritablement les requêtes SQL.
Ce driver utilise donc la configuration de la classe de l'objet qu'il cherche à remplir pour accéder aux données.

Pour moi, la configuration présente pour permettre l'accès aux données est un attribut de classe (et non d'objet), tout comme le driver (tous les objets instanciés passent par la même instance du driver, ca me semble plus léger au niveau mémoire).
La configuration contenant non seulement le nom de la table SQL (par exemple) mais aussi des attributs propres à l'objet, ca ne saurait être un attribut du driver.

En PHP il est possible de déclarer un attribut statique dans la classe mère et de renseigner sa valeur dans une sous-classe tout en permettant à la classe mère d'y accéder (c'est d'adaptation de contexte ou Late-Static Binding).
C'est intéressant pour intégrer le driver dans mes classes d'objet.
En Java ca ne semble pas possible. Ainsi, tout ce que j'ai mis en place tombe et du coup je suis très malheureux (forcément ).

J'aimerai trouver une solution intermédiaire entre mon modèle "PHP" un peu extrémiste avec toutes ces valeurs statiques sans forcément tout déclarer en attribut d'objet (je ne veux pas avoir 1000 instances du même driver pour 1000 objets de données).

Un exemple concret à cela serait (c'est faux mais c'est pour l'exemple) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
// Classe mère
public abstract class Mere {
  protected static String toto = "toto"; // C'est un String mais ça pourrait etre un objet Driver ou autre.
 
  public static show(){
    System.out.println(toto);
  }
}
 
public class Fille1 extends Mere {
  protected static String toto = "tata";
}
 
public class Fille2 extends Mere {
  protected static String toto = "titi";
}
 
// Test
Mere.show(); // Doit afficher "toto" et c'est bien le cas.
Fille1.show(); // Doit afficher "tata" mais affiche "toto".
Fille2.show(); // Doit afficher "titi" mais affiche "toto".
Si quelqu'un a des précisions à m'apporter je suis volontier preneur.

Merci par avance et bonne journée.