Domanda

Sto lavorando al progetto Zend, mi riferisco a altro progetto Zend per creare il nuovo Zend Project.But non mi piace di seguire ciecamente quel progetto senza capire. Nella struttura di directory Zend, classe Nel modello ci sono principalmente due tipi di classi che vedo, come come in

- models
   - DbTables
        - Blog.php  //Extends Zend_Db_Table_Abstract
   - Blog.php       // Contains methods like validate() and save()
   - BlogMapper.php // Also Contains methods like validate(Blog b) & save(Blog b)

Perché questa struttura specifica è seguito? E 'questo è quello di separare classe Object e il modello di database di classe?

Si prega di spiegare.

È stato utile?

Soluzione

DataMapper è un modello di progettazione da modelli di Enterprise Application Architecture .

Il Data Mapper è uno strato di software che separa gli oggetti in memoria dal database. La sua responsabilità è quella di trasferire i dati tra i due e anche per isolare gli uni dagli altri. Con Data Mapper l'in-memory oggetti non devono sanno nemmeno che c'è un regalo di database; hanno bisogno di alcun codice di interfaccia SQL, e certamente nessuna conoscenza dello schema del database.

Come si memorizzano i dati in un database relazionale di solito è diverso da come si potrebbe strutturare gli oggetti in memoria. Per esempio, un oggetto avrà una matrice con altri oggetti, mentre in un database, la tabella avrà una chiave esterna ad un altro tavolo invece. A causa della object-relational impedenza non corrispondente , si utilizza uno strato di mediazione tra l'oggetto di dominio e il database. In questo modo, si può evolvere sia senza influenzare l'altro.

La separazione della responsabilità Mapping nel proprio strato è anche più seguendo da vicino la singolo Responsabilità Principio . Gli oggetti non hanno bisogno di conoscere la logica DB e viceversa. Questo ti dà una maggiore flessibilità quando si scrive il codice.

Quando non volete utilizzare un modello di dominio, di solito Dont DataMapper necessità. Se le tabelle del database sono semplici, si potrebbe essere meglio con un TableModule e TableDataGateway o anche solo ActiveRecord.

Per vari altri modelli vedono la mia risposta a

Altri suggerimenti

L'idea di un modello è quello di concludere la raccolta logica dei dati all'interno del codice.

L'idea di un DataMapper è mettere in relazione questa collezione a livello di applicazione dei dati con quanto si archiviano esso.

Per un sacco di implementazioni ActiveRecord, il quadro non prevede la separazione di intenti e questo può portare a problemi. Ad esempio, un modello BlogPost può avvolgere le informazioni di base di un post come

  • titolo
  • autore
  • corpo
  • date_posted

Ma forse anche voi volete avere contenere qualcosa come:

  • number_of_reads
  • number_of_likes

Ora è possibile memorizzare tutti questi dati in una singola tabella MySQL per cominciare, ma come il tuo blog cresce e si diventa super-famoso, si scopre che i dati statistici sta prendendo un sacco di colpi e si desidera spostare via a un server di database separato.

Come si va sulla migrazione di quei campi del BlogPost oggetti fuori ad un archivio dati diverso senza modificare il codice dell'applicazione?

Con la DataMapper, è possibile modificare il modo in cui l'oggetto viene salvato nel database (s) e il modo in cui viene caricato dal database (s). Ciò consente di ottimizzare il meccanismo di memorizzazione senza dover cambiare la collezione reale di informazioni che l'applicazione si basa su.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top