Domanda di fabbrica di oggetti: utilizzando le informazioni sulla query del database per creare oggetti

StackOverflow https://stackoverflow.com/questions/3808052

Domanda

Ho diversi oggetti, come prodotti, ordini, ecc. Quando ricevo informazioni dal mio database prendo una riga e creo uno dei tipi di oggetti. Quindi lavoro con quell'oggetto creato. Ho letto che si chiama fabbrica.

C'è qualche vantaggio nel farlo? Soprattutto in un linguaggio digitale come PHP?

Grazie

EDIT: È qui che ottengo agnosticità del database? È questo che fa essenzialmente un Orm?

È stato utile?

Soluzione

Creando i tuoi oggetti dalle query del database, stai definendo la mappatura tra i tuoi oggetti e il database relazionale. Questo è esattamente ciò che fa il software ORM.

In tal modo e garantendo che i tuoi oggetti non accedano mai direttamente nel database, ma utilizzino invece le funzioni/oggetti di accesso al database, stai proteggendo il codice dalle modifiche in due modi:

  • Le modifiche allo schema del database non si increspano tramite il codice. Invece, le modifiche al codice verranno posizionate solo negli oggetti di accesso al database.

  • È possibile passare a un DBMS diverso implementando un nuovo livello di database che segue la stessa interfaccia dell'originale. Gli altri tuoi oggetti non richiederanno modifiche.

Immagino in questo senso, guadagni un po 'di agnosticità del database, ma probabilmente starai meglio usando una libreria di database che fornisce quell'agnosticità fuori dalla scatola.

A mio avviso, il vantaggio è che stai lavorando con gli oggetti e ottieni tutti i vantaggi che offre un linguaggio orientato agli oggetti. È quindi possibile leggere la logica del dominio a un livello superiore (in termini di oggetti che hai definito) senza setacciare le query del database. Scrivere l'orm tu stesso può essere difficile, ma ci sono strumenti là fuori che aiutano.

Questo è il percorso che prendo normalmente, ma non faccio alcun sviluppo PHP, quindi non posso dire quanto bene si applichi a quella lingua.

Altri suggerimenti

Quello che stai descrivendo è un'implementazione di un livello di accesso ai dati: non sembra un esempio del Modello metodo di fabbrica, né il Modello di fabbrica astratto.

Sì, gli ORM colmano il divario dagli oggetti a database relazionali e possono fungere da livello di accesso ai dati. Tieni presente che qualsiasi ORM che usi ha determinati pro/contro/limitazioni. A seconda della tua esperienza e requisiti, scrivere il proprio livello di accesso ai dati è talvolta una buona idea; Non sentirti come se dovessi usare un ORM di terze parti.

Sì, un buon livello di accesso ai dati semplifica lo scambio di meccanismo di archiviazione (database diverso, XML, file flat, qualunque cosa) senza modificare la logica aziendale, l'interfaccia utente o altro codice.

Indipendentemente da linguaggi a livello di rilascio o di tipo forte, se stai lavorando in un linguaggio OO, sarà molto più facile scrivere il codice utilizzando gli oggetti dati (forniti da un livello ORM o di accesso ai dati nostrani). Sono sicuro che è possibile scrivere un sistema senza livello di accesso ai dati, in cui il livello aziendale lavora direttamente con il database. Ma sarà probabilmente più difficile da implementare e mantenere.

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