2010-01-13 7 views
1

J'ai une classe qui effectue des opérations de base de données et retourne des résultats (array, true, false). Et j'ai une autre classe qui crée une chaîne JSON en utilisant cette classe dans son constructeur. Peut-on dire que cette classe est un adaptateur? Ou tout simplement emballage ou ...PHP Design Pattern

Class Db 
{ 
    public function getRows($params) 
    { 
     //... 
    } 
} 


Class DbAdapter 
{ 
    private $_dbh; 
    public function __construct($dbh) 
    { 
     $this->_dbh = $dbh; 
    } 

    public function getJson() 
    { 
     return '{"key": "foo", "key2": ' . json_encode($this->_dbh->getRows($params)) . '}'; 
    } 
} 

Merci

Répondre

1

Id dire son plus décorateur ... http://en.wikipedia.org/wiki/Decorator_pattern

+0

En fait, je l'ai d'abord pensé en tant que décorateur. Mais autant que je comprends le décorateur devrait ajouter de nouvelles méthodes/compétences à l'objet existant. Donc je ne pouvais pas décider. – jsonx

+0

Eh bien le mince est IMO ceci ne devrait pas être appliqué à votre classe de DB directement indépendamment de si un son adapteur ou décorateur à moins qu'il soit juste un format de retour (DB :: ASSOC, DB :: JSON, DB :: OBJ, etc.). Sinon, l'endroit approprié pour cela est vraiment directement sur la classe qui Modélise les données dans le tableau que vous renvoyez de 'getRow' ou sur un décorateur qui enveloppe un tel objet modèle. – prodigitalson

0

De: http://www.fluffycat.com/PHP-Design-Patterns/Adapter/

Les adaptateurs sont utiles si vous voulez utiliser une classe qui n'a pas tout à fait les méthodes exactes dont vous avez besoin, et vous ne peut pas changer la classe orignal. L'adaptateur peut prendre les méthodes auxquelles vous pouvez accéder dans la classe d'origine et les adapter aux méthodes dont vous avez besoin. Je dirais que votre code se qualifie comme un adaptateur si vous envisagez d'ajouter des méthodes pour compléter une autre classe.

+0

C'est la question que je ne prévois pas d'utiliser DbAdapter dans une autre classe. Pouvons-nous encore dire que c'est un adaptateur. – jsonx

0

Je ne pense pas que vous pouvez choisir un modèle et dire que c'est celui utilisé ici. Voici ma petite liste de modèles que je vois dans votre exemple. N'hésitez pas à commenter.

Delegation car la classe DBAdapter délègue la tâche d'obtention des lignes réelles à la classe DB.

Decorator car la classe DBAdapter décore la classe DB avec des fonctionnalités supplémentaires - celle de cracher la sortie dans JSON.

Adapter/Wrapper si vous pensez que cela permet à un autre client d'accéder à vos lignes de base de données qui ne comprennent que JSON ou XML ou un autre format. Mais si nous devions en choisir un, je dirais Adaptateur. Il prend les données sous la forme de structures de données PHP et les convertit en une représentation JSON.

Questions connexes