2009-07-04 3 views
2

Je suis actuellement en train d'écrire une application web implémentant le MVC et réduisant bien les choses complexes. Pourtant, je réfléchis depuis quelques heures à ce qu'il faut faire pour les futurs systèmes de base de données comme Oracle, PostgreSQL, Firebird, etc.Superposition d'applications PHP pour d'autres SGBD

Puis de nouveau pour implémenter ces adaptateurs dans la logique, c'est ce qui m'arrive, devrais-je juste déclencher-heureux avec des tonnes de SWITCH? Que puis-je faire dans cette situation?

Répondre

2

La réponse typique à ceci est d'utiliser la fonctionnalité ORM dans votre infrastructure. Vous pouvez soit traiter vos modèles en tant qu'objets de données, soit utiliser une composition et laisser les modèles contenir des objets de données. Quoi qu'il en soit, vos objets de données devraient être assez abstraits et compiler principalement des requêtes de requêtes DB en utilisant des méthodes - comme le fait le framework Zend avec l'objet Select. Cela vous permet a) de garder SQL hors de vos objets et b) de remplacer les objets qui produisent réellement votre sql. Par conséquent, si vos objets de données héritent tous de la même classe ORM de base, vous pouvez attribuer à cette classe de base un objet DB auquel elle envoie des requêtes. Si vous l'ajustez correctement, la classe de base ORM ignorera le type de classe DB: l'objet de données compile un objet select et le remet à l'objet DB qui l'interprète ensuite de la manière qui lui convient le mieux.

Et la réponse courte: non, ne pas utiliser un tas de déclarations switch :)

+0

J'ai la planification d'une semaine à utiliser Doctrine ORM (http://doctrine-project.org) parce que je ne l'ai pas vouloir créer une classe idiote envelopper des trucs MySQL. Pourtant, je suis encore un peu hésitant parce qu'ORM est encore un nouveau terme pour moi. La doctrine ORM sera-t-elle la réponse? – allenskd

+0

Je n'ai aucune idée de la doctrine, je ne l'ai jamais utilisée. Cependant, l'utilisation d'un ORM en général est un grand pas en avant dans la réutilisation du code et vous facilite la vie en général. L'utilisation d'une base de code établie est probablement encore meilleure, et devrait, espérons-le, s'accompagner d'un grand nombre de bonnes pratiques. – Fake51

0

Si vous voulez un ORM léger pour PHP, je regarde Outlet. Il devrait fonctionner avec n'importe quel type de base de données PDO standard.

1

Et pourtant, je l'ai beaucoup réfléchi pendant quelques heures ce qu'il faut faire pour les systèmes de bases de données futures comme ...

You’re NOT gonna need it!

+0

Bien que ce soit une bonne chose à garder à l'esprit, refactoring de votre application pour pouvoir basculer entre les principales bases de données peut être une énorme douleur si elle n'a jamais été conçue dans cet esprit. N'échangez pas le gain mineur maintenant pour la douleur massive plus tard - faites le compromis seulement si vous êtes sûr que vous pouvez implémenter la commutation DB aussi facilement que vous pouvez maintenant. – Fake51

+0

À quand remonte la dernière fois que vous avez dû changer le moteur de base de données d'une application existante? Je dois insister pour ne pas être d'accord sur votre priorité. Je dis, faire le compromis seulement si vous êtes positivement sûr (comme dans: avoir un cas d'utilisation concret) que vous avez besoin de changer de base de données. Il peut y avoir d'autres raisons plus valables pour une abstraction à la base de données, mais ce n'en est pas une. – troelskn

+0

Je voudrais partager quelque chose et c'est que je prévois d'ouvrir l'application que j'écris. Bien sûr, il peut sembler trop tôt pour commencer à penser à fournir d'autres adaptateurs. Je crois que l'utilisation d'un ORM peut être correcte, mais je suppose que le temps parlera finalement pour voir comment il fonctionne et si ma décision était la bonne. C'est une bonne chose à garder à l'esprit (le lien que vous avez posté) pour résoudre les problèmes et les besoins actuels. – allenskd

Questions connexes