2011-09-27 4 views
0

Je suis la conception du modèle pour une application qui Interroge/objets dans une base de données ensemble à distance. Pour les performances, nous devons mettre en cache les données localement. J'ai lu dans divers threads qu'il est préférable de mettre la logique de mise en cache dans un modèle parent plutôt que le contrôleur principal. C'est probablement une question de base sur la POO, mais je ne suis pas sûr de la mise en œuvre.PHP avec la mise en cache

Dans ma conception de PHP, j'ai trois objets. Appelons-les P (pour Parent), L (pour Local) et R (pour Remote). À l'heure actuelle, je prévois de les avoir interagissent comme ceci:

class P 
{ 
    var $column1; 
    var $column2; 
    ... 
    var $R; 
    var $L; 
    ... 

    function __construct() 
    { 
     $this->R = new Remote(); 
     $this->L = new Local(); 
    } 

    function get($id) 
    { 
     if (is_cached()) 
     { 
     $this->L->($id); 
     } 
     else 
     { 
     $this->R->get($id); 
     } 
    } 
} 

class R 
{ 
    public function get($id) 
    { 
     return $this->remoteDB->get($id); 
    } 
} 

class L 
{ 
    public function get($id) 
    { 
     return $this->localDB->get($id); 
    } 
} 

Le problème que je vois avec cette conception est qu'il est A) probablement nécessitant la charge() fonctions dans les trois objets qui semble inefficace et B) exige passer des propriétés d'un objet à un autre (plutôt que de simplement les référencer directement).

Toutes les suggestions pour une meilleure façon de le faire?

+0

modèle de stratégie? Ou peut-être juste un visiteur? – hakre

Répondre

0

Je suggère que vous regardez dans les cadres existants qui traitent des niveaux d'accès aux bases de données et ont construit dans la gestion du cache.

A Few: Kohana, Zend, code Ignitor

Je suis aussi ne sais pas pourquoi vous ne pouvez pas les fonctions abstraites votre charge et ont vos modèles étendent l'abstraction?

+0

Vous pouvez également référencer la variable directement en les passant & $ dans la liste des paramètres des fonctions – mprototype