Come gestire più modelli relativi a un singolo modello

3

Prima di tutto, mi dispiace per il vago titolo.

Nel nostro sito web, abbiamo classi modali per rappresentare le nostre tabelle di database, che contengono dati di righe. Attualmente sto lavorando su una pagina di stile stat, e mi chiedo come altri programmatori gestiscono il collegamento di molti modelli insieme.

Ad esempio, nella pagina, sto elencando tutto Customers , con i rispettivi Addresses (multipli per Cliente. Home, fatturazione, lavoro ecc.) e ogni Order che collega al Cliente e indirizzo.

Le uniche opzioni a cui posso pensare sono:

  1. Elimina i modelli, riporta una matrice raw da una query di join, che ha tutti i dati necessari.
  2. Ritrova tutti i diversi modelli e ordinali in un array, ad esempio $customers[0]['customer'] , $customers[0]['addresses'] ecc ...
  3. Crea una sorta di strano modello ibrido che contiene tutti i dati o contiene modelli.

Nessuno di questi mi sembra particolarmente ideale, ma non conosco altri modi per farlo.

Attualmente sto usando il numero 2, ma sono curioso di sapere se c'è un modo diverso per avvicinarmi a questo.

Ci sono altri modi in cui le persone gestiscono questo tipo di scenario?

    
posta TMH 27.08.2015 - 11:15
fonte

2 risposte

2

Quindi dai suoni di esso hai un modello di dominio anemico

link

Questo è un problema perché hai oggetti che in realtà non fanno altro che contenere dati, ma hai tutto il sovraccarico di classi e oggetti senza alcun comportamento.

Se non riesci a capire cosa stanno facendo i tuoi oggetti oltre alla semplice memorizzazione dei dati, allora non sono oggetti. Gli oggetti sono unità di comportamento, non dati. Gli oggetti che non fanno altro che contenere i dati per qualcos'altro sono un odore di design. Significa che il tuo comportamento è altrove, ma quegli oggetti / unità di comportamento non hanno accesso ai dati di cui hanno bisogno per svolgere il loro comportamento.

Quindi andrei con l'opzione 1 dal momento che sembra che abbiate solo bisogno di strutture dati. Vorrei anche rivedere il design di tutto e vedere dove il tuo comportamento è scomparso.

    
risposta data 28.08.2015 - 18:17
fonte
0

Manca semplicemente qualcosa chiamato ORM - tramite un Framework o (solo in alcuni casi d'uso consigliati) fatto a mano. Tramite ORM definisci le relazioni tra entità tramite codice (ad es. 1 ordine < - > n OrderPositions). E se stai usando un framework inizia la magic : puoi risolvere in una sola coded query tutte / molte relazioni che sono necessarie - Little sidenote: a volte questo non è voluto e più avanti nel ciclo di vita del prodotto causerà problemi.

Dopo aver recuperato i dati dal database, la parte importante di ORM dà il via a: assemblare gli oggetti dai dati recuperati e non solo quello; crea l'intero oggetto grafico (cioè ogni oggetto correlato viene messo in posizione, per così dire).

Dopo che il tuo Webframework (in genere) serializza i dati su JSON

Il tuo frontend ha qualcosa del genere:

{
  "posNr": "1",
  "description": "My Life with a nashorn",
  "price": "1990",
  "ordernumber": "1234",
  "customer": {
    "firstName": "Alice",
    "customernumber": "123456789",
    "address": {
      "street": "bakerstreet 221b",
      "city": "london"
    },
    "links": [{
      "rel": "customer",
      "href": "http://localhost:8080/customers/1"
    }]
  },
  "links": [{
    "rel": "self",
    "href": "http://localhost:8080/orders/1234/1"
  }]
}

Detto questo: se hai bisogno di una collezione di clienti con i loro rispettivi ordini, ecc., semplicemente richiedi una Collezione dalla tua applicazione che risulterebbe in una matrice della struttura di cui sopra.

In linea di principio, questo è simile all'opzione 2 . Ma lo stai facendo manualmente inutilmente.

    
risposta data 28.08.2015 - 18:58
fonte

Leggi altre domande sui tag