2010-07-17 5 views
3

Je suis en train de concevoir une application web (vraiment, c'est un passe-temps, et j'essaie de m'enseigner le design, et quoi de mieux que de le faire :)). Quoi qu'il en soit, je pensais à la façon dont je traiterais ma base de données. Je suis à l'aise avec PDO, et je pensais tirer parti de PDO dans ma classe d'abstraction. Je pense à faire un singleton, de sorte qu'il n'y ait qu'une seule connexion à la base de données. Ce singleton créerait une connexion PDO. Après cela, je ne vois pas pourquoi j'aurais besoin de faire trop d'autres choses. Je peux alors utiliser le gestionnaire de base de données pour appeler les fonctions PDO. Je pourrais avoir besoin de certaines fonctions d'aide, mais quand j'y reviendrai, j'utiliserais simplement PDO pour les requêtes SQL.Conception de classes d'abstraction de base de données utilisant PHP PDO

Y at-il un problème avec cette approche? Cela semble trop simple comparé aux cours d'abstraction que j'ai utilisés.

+2

L'abstraction de base de données est un mythe ridicule. ORM est une autre histoire, pas moins mauvaise mais vraie au moins. –

+0

Vous n'avez pas besoin du Singleton – Gordon

+0

@Gordon, pouvez-vous expliquer pourquoi je n'aurais pas besoin du singleton? J'ai toujours entendu que vous auriez besoin du singleton pour vous assurer qu'il n'y a pas d'écritures simultanées et des choses comme ça. – Tim

Répondre

5

Vous n'avez pas besoin du singleton.

Une base de données Singleton ne résoudra aucun problème de concurrence. Si quelque chose, il peut s'assurer que vous avez une seule instance PDO pour la demande, il a été créé en. Et il fournit un accès global, que beaucoup de gens considèrent comme une mauvaise chose. En outre you have to make some extra effort when testing the Singleton.

Juste create a wrapper that lazy connects and stores the instance en cas de besoin dans votre bootstrap et réglez l'instance à votre DALsupertype, par exemple un TableDataGateway. De même, vous ne vous limitez pas à une seule instance PDO au cas où vous en auriez besoin à un moment donné.

3

Peut-être que cela vous semble si simple, car PDO est essentiellement une classe d'abstraction de base de données. Cela signifie: le travail est déjà fait.

+0

C'est vrai, c'est pourquoi je pose cette question. Il y a tellement de classes d'abstraction de base de données et de whizbangs là-bas, il me semblait qu'il me manquait quelque chose ...Content de savoir que je ne suis pas complètement hors de mon rocker. – Tim

1

Oui, c'est un bon début. PDO + singleton est une combinaison géniale et souvent utilisée. Comme personnellement, je n'aime pas tous les dactylographie impliqués que d'utiliser des singletons, j'ai écrit a very lightweight database class.

Il présente deux caractéristiques supplémentaires sur PDO: L'accès de l'instance (paresseux) PDO utilisant __callStatic (DB::query() au lieu de DB::instance()->query()) et deux fonctions pour faciliter le citant (DB::q('INSERT INTO table (name) VALUES (?s)', $_POST['insecure_name'])). Peut-être que vous voulez regarder les deux, c'est vraiment pratique;)

1

Vous pouvez également être intéressé par le projet php-pdo-wrapper-class. C'est une classe de base de données légère qui étend PDO, en ajoutant plusieurs méthodes - insérer, mettre à jour, supprimer, sélectionner (et quelques autres) - pour simplifier les instructions SQL communes. J'ai utilisé ce projet dans mon développement et je le recommande fortement.

Questions connexes