2010-11-25 11 views
1

Je voudrais utiliser la même classe en tant que classe de ligne et une classe de base pour obtenir des résultats, mais je pense que ce train de faire dans le mauvais sens ...cadre de lignes zend ensemble de lignes, toutes même classe

Ie J'ai besoin de la même classe pour étendre Zend_Db_Table_Row_Abstract et Zend_Db_Table_Abstract mais pense que cela met la logique pour deux choses différentes dans la même classe? (Et l'extension deux est impossible) ..

Par exemple, je pense que la classe de base doit gérer les requêtes de sélection, etc., et la classe de ligne doit gérer la mise à jour, etc. Mais je voudrais pouvoir aller:

class Article extends BaseModel { //Set table name and some custom functions } 

BaseModel { //Define custom functions for finding rows and updating } 

Article::findAll() //This is table logic 

Article::insert($data); //This is row login 

Quelle est la bonne façon de faire cela?

Répondre

1

Je pense que vous êtes à la recherche de la ActiveRecord pattern:

Un objet qui enveloppe une ligne dans une table de base de données ou une vue, encapsule l'accès base de données et ajoute la logique de domaine sur ces données.

Il existe une proposition pour un composant Zend_Db_ActiveRecord, mais il n'a jamais quitté l'étape "Nouveau". Cependant, il existe un certain nombre de UseCases dans la proposition, ce qui pourrait vous donner quelques idées sur la manière de l'implémenter vous-même. Vous pourriez également être intéressé par l'utilisation de solutions existantes 3ème partie, comme Propel ou phpactiverecord

Please be aware that ActiveRecord is often misused and has a number of drawbacks due to the violation of separation of concerns due to the intermingling of db access and business logic in one class.

+0

Ce que je veux, la honte ZF n'a pas encore développé. – Ashley

0

La bonne façon de procéder est d'avoir deux classes - une pour les lignes (une sorte de modèle) et pour la table (une sorte de mappeur).
Pourquoi voulez-vous les avoir dans une classe? N'est-ce pas l'intention des classes de séparer des choses qui n'appartiennent pas ensemble (directement)?
Si vous voulez vraiment qu'il soit dans la même classe, et une méthode getTable à la rangée-classe et étendre la classe de ligne pour être un adaptateur à la classe de la table (que je dis fortement fortement, bien sûr :).

Questions connexes