2010-06-03 3 views
3

Cela m'a dérangé pendant un bon moment, mais maintenant c'est la nécessité que je trouve la réponse.Utiliser Doctrine pour résumer les opérations CRUD

Nous travaillons sur un projet assez important en utilisant CodeIgniter plus Doctrine.

Notre application a un front-end et aussi une zone d'administration pour l'entreprise de vérifier/modifier/supprimer des données.

Lorsque nous avons conçu l'avant, nous avons simplement consumé la majeure partie du code Doctrine droite dans le contrôleur:

//In semi-pseudocode 
function register() 
{ 
    $data = get_post_data(); 

    if (count($data) && isValid($data)) 
    { 
    $U = new User(); 
    $U->fromArray($data); 
    $U->save(); 

    $C = new Customer(); 
    $C->fromArray($data); 
    $C->user_id = $U->id; 
    $C->save(); 

    redirect_to_next_step(); 
    } 
} 

Il est évident que quand nous sommes allés faire la duplication de code de vues admin a commencé et étant donné que nous étions dans un " Activez le mode "DONE" pour qu'il pue maintenant avec le ballonnement du code. J'ai déplacé beaucoup de fonctionnalité (logique métier) dans le modèle en utilisant des méthodes de modèle, mais le CRUD de base ne rentre pas ici. J'allais tenter de placer le CRUD dans des méthodes statiques, c'est-à-dire que Customer :: save ($ array) [effectuerait à la fois l'insertion et la mise à jour selon si prikey est présent dans le tableau], Customer :: delete ($ id), Customer :: getObj ($ id = false) [si faux, récupère toutes les données]. Cela va devenir douloureux mais pour 32 objets de modèle (et en croissance). En outre, les modèles doivent parfois interagir (comme l'interaction ci-dessus entre les données utilisateur et les données clients), ce qui ne peut pas être fait dans une méthode statique sans casser l'encapsulation. J'envisage d'ajouter une autre couche à cela (exposer les services web), donc sachant qu'il y aura 3 "contrôleurs" à un moment donné, j'ai besoin d'encapsuler ce CRUD quelque part (évidemment), mais les méthodes statiques sont la voie à suivre , ou y a-t-il une autre route?

Votre contribution est très appréciée.

Répondre

2

Pourquoi ne pas utiliser une façade?

class RegistrationManager { 
public function register($postData, $callBack){ 
     $data = get_post_data(); 
     if (count($data) && isValid($data)){ 
     $U = new User(); 
     $U->fromArray($data); 
     $U->save(); 
     $C = new Customer(); 
     $C->fromArray($data); 
     $C->user_id = $U->id; 
     $C->save(); 
     $callBack(); //I like this but you need PHP5.3 
     } 
    } 
} 

Dans vos contrôleurs d'applications:

$r = new RegistrationManager; 
$r->register(get_post_data(), function(){ redirect_to_next_step(); }); 

Façades sont des modèles trop (à mon avis), vous pouvez les utiliser pour cacher ou complexités et câblages réduire la déduplication de code.

+0

Cela a du sens. Je pense que je suis trop pris en pensant que Model doit être en relation 1: 1 objet à table; besoin de penser plus en dehors de la boîte. Merci. – TomWilsonFL

Questions connexes