Question

Pour plusieurs raisons (qui peuvent tous, au fond, être décomposées aux mauvaises décisions de gestion), nous ne pouvons pas passer à PHP5, ce qui signifie que nous allons devoir soutenir PHP4 probablement pour quelques années.

Comme beaucoup de nos applications (comme beaucoup d'applications web) sont glorifiés applications CRUD, et parce que j'aime prendre le projet de la maison de temps en temps à perdre un peu de temps, je suis en train d'écrire un petit ORM comme classe qui servira d'enveloppe pour la plupart des requêtes de base (insertion, mise à jour, remplacer, supprimer, entre autres.) comme il doit soutenir PHP4, PDO est hors de question, donc je vais devoir revenir à une langue spécifique des fonctions telles que mysql_query. Parce que nous utilisons quelques systèmes différents, dans une variery des versions (versions 4 et Interbase ci-dessus, Firebird, MySQL), mon ORM / classe Wrapper (pas sûr de ce que l'appeler), est lié à grandir.

Pour résoudre ce problème, je l'ai pensé à deux « solutions » possibles:

  • Écrivez une classe énorme, avec des déclarations de switch à l'intérieur des fonctions basées sur une variable $database_system qui définit la langue / SGBDR utilisé
  • Écrivez une classe de base, et d'écrire une classe dérivée par SGBDR (éventuellement par version, si les caractéristiques diffèrent beaucoup entre eux).

Actuellement, je me penche vers la deuxième option; à mon avis, il facilite la maintenance, en particulier lors de l'ajout d'un nouveau SGBDR à la liste pris en charge. D'autre part, avec tous les SGBDR en utilisant son propre ensemble de fonctions PHP, je ne sais pas combien il y aurait d'hériter d'une classe de base. En gardant à l'esprit cette classe finira par soutenir des fonctionnalités telles que faire la queue, l'exécution (et éventuellement commettre, si elle est soutenue) toute une liste de requêtes à la fois.

Compte tenu de cette situation, quelle approche serait le mieux? A ou B, ou est-il peut-être un C que je ne considère pas encore? Voici quelques exemples de classes existantes seraient parfaits, malheureusement la plupart des années ORM que j'ai rencontré compter sur le (PHP5) classe PDO.

Était-ce utile?

La solution

Certainement aller avec option 2. Votre approche est OO supérieure à l'instruction switch massif. Votre classe de base vous donnera plus que héritant des méthodes communes. Il vous offre une interface cohérente qui peut ensuite être utilisé comme un adaptateur lorsque vous migrez vers une autre stratégie de persistance de base de données (PHP5 / AOP lorsque la direction est à leurs sens?). Je dirais même modèle près de votre interface après PDO au point où AOP pourrait même être une fonction de remplacement dans votre couche de persistance Homegrown si nécessaire. De plus, la courbe d'apprentissage pour les nouveaux développeurs sur le projet d'apprentissage de votre couche de persistance sera plus faible si elles ont déjà une expérience avec AOP.

Autres conseils

Je ne comprends pas une décision de gestion à utiliser un logiciel tout à fait non pris en charge en tant que base pour le développement de nouveaux logiciels. Pour un gestionnaire, il y a près de coûts zéro pour l'installation de PHP 5 au moins en parallèle. La seule conséquence de PHP 4 sont les coûts de développement plus élevés (il y a plus PHP 5 classes que pour PHP 4, tous les outils ces jours-ci dépendent surtout de PHP 5 et les derniers rappels de PHP 4 disparaissant) et la production avec PHP 5 est moins cher - vous avez pour corriger les bugs dans le PHP vous en mode Process, PHP 5.3 utilise des ressources système de manière moins, ....)

Mais si vous voulez vraiment aller dans ce sens: Pear :: MDB2 devrait faire ce vous avez besoin et est compatible PHP 4 et très stable.

Mais je préférerais changer d'emplois ... ces décisions ne sont généralement pas les seuls stupides.

Si quelqu'un cherche quelque chose simular (je ne l'espère pas) mais si -. Vous devriez jeter un oeil à xPDO

Il est une alternative pour pdo travailler sur PHP4. Ne jamais essayé de l'utiliser - mais je pense que cela devrait fonctionner ... http://www.xpdo.org/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top