2009-02-04 12 views
7

Sto costruendo un'applicazione in PHP e sto usando il modello di dati mapper per il mio accesso DB. Stavo considerando l'utilizzo del pattern Observer per far sì che tutti i miei mappatori osservino le entità che creano, in modo che possano salvare automaticamente tutte le modifiche sul database senza che io debba riprenderle manualmente.Data Mapper + Observer modello

mi stavo chiedendo se questa è stata una buona idea, o se si tratta di cattiva pratica, ecc?

In genere sto lavorando con alcuni oggetti collegati in una gerarchia, e al momento devo analizzare manualmente ogni oggetto sul suo mapper, che è piuttosto noioso, quindi sto solo provando a trovare una soluzione migliore .

Grazie, Jack

+0

Grande questione, la speranza si ottiene alcune risposte decenti. – Asciant

risposta

3

suona decisamente come una buona idea per me. Quello che stai facendo è simile al modello Unit Of Work destinato a tenere traccia delle modifiche apportate agli oggetti mappati e impegnarsi (di solito come una singola transazione) una volta che il gioco è fatto.

Credo che progetti come Outlet e Repose forniscano questo per voi in PHP, oltre ad alleviare alcuni dei problemi di mappatura, ma non li ho usati personalmente.

A parte questo, sembra che le gerarchie degli oggetti possano beneficiare del fatto di essere visualizzate come Aggregates se si desidera percorrere il percorso Domain Driven Design e beneficiare dell'isolamento pulito che porta.

-

Edit: sembra anche eZ Components ha una funzionalità soluzione abbastanza completo di PHP ORM, e Doctrine 2.0 si preannuncia in questo modo troppo.

-

Edit 2: Io avrei non un'occhiata a Propel o creolo per il problema che si sta discutendo. Il creolo non è un ORM, ma più un livello di astrazione DB simile a un PDO - e il progetto è ora ufficialmente "morto". Propel utilizza il pattern ActiveRecord, non il pattern DataMapper, così gli oggetti del tuo dominio finiscono con una responsabilità di persistenza molto più ampia e AFAIK non include una funzione Unit Of Work.

+0

Ciao, grazie per le informazioni, esaminerò sicuramente i progetti che hai menzionato. –