Quando si esegue il mapping da un database, gli oggetti OOP (entità) devono memorizzare i valori del database negli attributi?

3

Quando si tratta di OOP da cui viene letto e scritto un database esterno, è necessario disporre di attributi / proprietà all'interno degli oggetti per archiviare i dati? O è sufficiente leggere semplicemente dal database, visualizzarlo immediatamente e in seguito inserire direttamente i dati registrati in esso?

Se è necessario disporre di campi all'interno degli oggetti per memorizzare i dati, come / quando vorresti leggere o scrivere sul database e aggiornare questi campi?

Comprendo il concetto di OOP e di come un oggetto dovrebbe rappresentare un'entità (una cosa, come un utente), ma quando si tratta di sviluppo web, database e OOP non sono sicuro di comprendere appieno come si intende lavorare insieme.

In passato, il modo in cui l'ho gestito consisteva nell'avere oggetti con i metodi CRUD, nell'accettare i dati dalla vista e nel passare i dati al controller per essere interpretati per la visualizzazione.

Ho guardato post come il seguente, ma non sembra chiarire nulla per me: Gli oggetti in OOP devono rappresentare un'entità?

Ho anche provato a cercare "OOP quando lavoro con un database", ma solo tutorial che mostrano come creare un oggetto database e nulla che mi aiuti a capire meglio.

Modifica:

Ho anche visto che l'ORM menzionava molto come soluzione per mappare un database a un oggetto, ma ho ancora difficoltà a comprendere esattamente perché è necessario memorizzare i dati in un oggetto anziché semplicemente visualizzarli o memorizzarli immediatamente.

    
posta Andre C 10.02.2016 - 07:36
fonte

1 risposta

4

In casi semplici, è possibile leggere le informazioni sulle entità dai set di risultati della query del database e fare tutto ciò che deve essere fatto senza creare oggetti. Per i casi più complicati, è più conveniente e forse più efficiente per creare oggetti per rappresentare le entità. Ma tu non devi farlo. Anche nei casi più complicati potresti probabilmente evitare di creare oggetti per rappresentare le entità ... anche se dovresti pagare un numero di penalità per farlo.

È certamente "più orientato agli oggetti" rappresentare le entità come oggetti. Ma non esiste una legge che affermi che il tuo codice debba essere al massimo OO.

Il titolo della domanda originale poneva una domanda completamente diversa:

Do OOP objects (entities) need to have attributes/properties?

La risposta è che non devono:

  • Un oggetto può essere stateless, costituito solo da metodi che operano sui loro argomenti e restituiscono risultati.

  • Lo stato di un solo oggetto può essere la sua identità 1 ... che non ha bisogno di attributi da rappresentare. (Anche se si sta per memorizzare un oggetto il cui unico stato è la sua identità in un database, allora molto probabilmente sarà necessario un attributo id per rappresentare l'identità dell'oggetto (chiave primaria) come memorizzata nella tabella del database.)

1 - Ad esempio, new Object() in Java sta creando un oggetto il cui unico stato esplicito è la sua identità. (Lo stato implicito include lo stato mutex se Object viene utilizzato come mutex primitivo e l'hashcode dell'identità se viene calcolato.)

    
risposta data 10.02.2016 - 08:39
fonte

Leggi altre domande sui tag