Personnellement, je suis en train de développer mon propre système de DAO/ORM mais en gardant le coté optimisation.
Je veux dire, il y a des requêtes simple qui ne peuvent pas être optimisé qui sont tous le temps pareil :
- Select sur une table
- Update sur une table
- Delete sur une table
Ces trois type de requêtes peuvent largement être générer à la volé avant la création du projet.
Mon idée est de prendre un logiciel de création de DB (Dbdesigner 4 par exemple). Une fois qu'on a une BDD, on génère un fichier XML avec le logiciel et on le parse avec un sous-projet pour générer les bo/dao avec des requetes simple, le tout héritant d'une classe DAO/BO abstract.
Donc on aurait 2 fichiers par table : Un BO et un DAO.
EN gros on pourra ensuite faire du :
$MonObjetDAO->GetAllByID($id);
ou
$MonObjetDAO->Select('$requete');
ou
$MonObjetDAO->Select('champs1;champs2;champs3','Table2;Table1','Gestion du WHERE');
ou
$MonObjetDAO->Update(ObjetBO);
etc...
Maintenant, le truc pratique en objet pour la maintenance c'est de mettre toute les requêtes SQL dans la partie DAO. Et la ça devient compliqué, car si on modifie les classes générer on ne peut plus les régénérer car on perdrait le code qu'on a modifier. Il reste donc alors de créer des classes à la main qui hériterait des classe générées, où l'on rajouterai nos requêtes perso. Comme ça on garde la séparation CODE SQL/CODE PHP. Ou tout simplement créer de nouvelles classes qui ne correspondrait pas à un objet en particulier mais à une fonction...
Liste des avantages :
- Une partie du code est générer : bo/dao
- Possibilité de faire des requêtes complexe sans perte d'optimisation.
- Possibilité de générer les classes en fonction d'une classe d'abstraction et donc avoir la possibilité de changer de BDD (Mais je ne garderait pas cette idée, vu qu'on perd de l'optimisation)
Enfin bref c'est une idée comme un autre... ^^
PS : Enfin on peut optimiser le tout eau niveau du développeur en intégrant à son IDE des outils lui permettant de développer plus rapidement.
Par exemple avec Zend Studio, on a accé à tous les objet, mais si on pouvait avoir assez à un genre de structure, qui représenterait une table et ses champs.
Comme ça on pourrait faire en gros:
$MonObjetDAO->Select(Table.champs1,Table.Champs2) (Complètement fictif comme example)
Mais ça serai l'IDE qui proposerait les champs...
Je veux dire, il y a des requêtes simple qui ne peuvent pas être optimisé qui sont tous le temps pareil :
- Select sur une table
- Update sur une table
- Delete sur une table
Ces trois type de requêtes peuvent largement être générer à la volé avant la création du projet.
Mon idée est de prendre un logiciel de création de DB (Dbdesigner 4 par exemple). Une fois qu'on a une BDD, on génère un fichier XML avec le logiciel et on le parse avec un sous-projet pour générer les bo/dao avec des requetes simple, le tout héritant d'une classe DAO/BO abstract.
Donc on aurait 2 fichiers par table : Un BO et un DAO.
EN gros on pourra ensuite faire du :
$MonObjetDAO->GetAllByID($id);
ou
$MonObjetDAO->Select('$requete');
ou
$MonObjetDAO->Select('champs1;champs2;champs3','Table2;Table1','Gestion du WHERE');
ou
$MonObjetDAO->Update(ObjetBO);
etc...
Maintenant, le truc pratique en objet pour la maintenance c'est de mettre toute les requêtes SQL dans la partie DAO. Et la ça devient compliqué, car si on modifie les classes générer on ne peut plus les régénérer car on perdrait le code qu'on a modifier. Il reste donc alors de créer des classes à la main qui hériterait des classe générées, où l'on rajouterai nos requêtes perso. Comme ça on garde la séparation CODE SQL/CODE PHP. Ou tout simplement créer de nouvelles classes qui ne correspondrait pas à un objet en particulier mais à une fonction...
Liste des avantages :
- Une partie du code est générer : bo/dao
- Possibilité de faire des requêtes complexe sans perte d'optimisation.
- Possibilité de générer les classes en fonction d'une classe d'abstraction et donc avoir la possibilité de changer de BDD (Mais je ne garderait pas cette idée, vu qu'on perd de l'optimisation)
Enfin bref c'est une idée comme un autre... ^^
PS : Enfin on peut optimiser le tout eau niveau du développeur en intégrant à son IDE des outils lui permettant de développer plus rapidement.
Par exemple avec Zend Studio, on a accé à tous les objet, mais si on pouvait avoir assez à un genre de structure, qui représenterait une table et ses champs.
Comme ça on pourrait faire en gros:
$MonObjetDAO->Select(Table.champs1,Table.Champs2) (Complètement fictif comme example)
Mais ça serai l'IDE qui proposerait les champs...
Bientôt un jeu unique sur le thème de Battlestar Galactica :
http://www.battlestar.fr
http://www.battlestar.fr