ORM Strumenti e vantaggi dei riferimenti circolari nelle entità

2

Fammi dimostrare un semplice esempio,

Class Organization

  • ID type Number,
  • Name type String,
  • HAS A -> Collection

Class Facility

  • ID type Number,
  • Name type String,
  • Location String ,
  • HAS A -> Organization

Sto dimostrando un semplice riferimento circolare tra due oggetti di un modello anemico di dati. Supponendo che siano mappati su uno strumento ORM, una raccolta di strutture può essere recuperata pigramente da un'organizzazione, e allo stesso modo un'organizzazione può essere recuperata pigramente da una struttura.

Capisco la convenienza di questo, almeno sul livello intermedio. Con una singola struttura posso immediatamente ottenere informazioni sulla sua organizzazione dal codice. La mia domanda è:

Ci sono altri vantaggi rispetto ai riferimenti circolari nelle entità mappate ORM?

Nonostante le mie intense emozioni su questo argomento in questo momento, sto facendo del mio meglio per non caricare la domanda ...

Il principale svantaggio esasperante di cui soffro in questo momento è quando sto cercando di serializzare questi oggetti in XML e inviarli attraverso un servizio web, lontano dai comfort elevati della sua benevola sessione ORM. Non riesco a serializzarli come è perché i proxy ORM non possono essere inviati, devo o recuperare avidamente le entità figlio e inviare un albero di oggetti MASSIVE, o rimuovere i proxy dal grafico.

Abbastanza giusto, così ho scritto un'utilità per rimuovere semplicemente i proxy, Great! Serializza e le prestazioni sono piacevolmente buone, tuttavia quando ottengo questo oggetto da un servizio Web UpdateEntity, manca il resto del grafico dell'oggetto, e ora se dovessi aggiornare questa entità tramite l'ORM, penso che ho cancellato tutto di questi oggetti mancanti dall'albero. Non va bene.

Non posso fare a meno di ritenere che i riferimenti circolari presentino un enorme svantaggio in questo scenario e non riesco davvero a pensare a un buon modo per superare questo problema e ai paralizzanti problemi di prestazioni che ho il compito di risolvere senza dati riprogettazione del modello e rifattorizzazione massiva.

Quali sono le tue opinioni su questo? È davvero un odore di design?

    
posta maple_shaft 04.11.2011 - 15:57
fonte

1 risposta

1

Quando serializzi entità con riferimenti circolari, chiedi al serializzatore di rimuovere una delle dipendenze. Nel tuo esempio, sarebbe Facility → Organization, a meno che non si serializzi solo un Facility e non siano necessari altri membri della stessa organizzazione.

È tecnicamente possibile e facile da fare in C #. Mi aspetto che la situazione sia abbastanza simile in Java.

when I get this object back from an UpdateEntity web service, it is missing the rest of the object graph

Non è chiaro cosa stai cercando di ottenere qui. Prima di accedere ai tuoi dati, devi prima convalidarli, specialmente quando provengono da input dell'utente, cioè da una fonte che non si ritiene mai attendibile. Non puoi semplicemente scaricare tutti i dati dal tuo database all'utente, quindi ricevere i dati aggiornati e svuotarli nuovamente nel database.

Are there ANY other advantages to circular references in ORM mapped entities?

Io non la penso così Forse ci sono alcuni vantaggi per l'ORM, a livello di validazione o per ottimizzare le prestazioni, ma sono abbastanza incerto su questo; in tutti i casi, l'obiettivo principale dei riferimenti circolari negli ORM è semplificare la manipolazione dei dati nel livello aziendale.

    
risposta data 04.11.2011 - 16:19
fonte

Leggi altre domande sui tag