ORM e architettura basata su componenti

2

Ho aderito a un progetto in corso, in cui il team chiama la sua architettura "basata su componenti". Il livello più basso è un grande database. L'accesso ai dati (tramite ORM) e i livelli aziendali sono combinati in vari componenti. Ad esempio, c'è un componente per la gestione dei conti bancari, uno per la generazione di fatture, ecc. Quindi ogni componente contiene l'accesso ai dati solo a una parte dello schema. Il mio problema è l'accoppiamento dell'accesso ai dati e della logica aziendale in una tale struttura, perché mentre una tale partizione ha senso per la logica aziendale, complica l'accesso ai dati.

Dal mio punto di vista la separazione dello strato di accesso ai dati in vari componenti sembra controproducente, perché ci nega le capacità di mappatura relazionale dell'ORM. Ad esempio, quando desidero interrogare tutte le fatture per un cliente, devo identificare il cliente con il componente "clienti" e quindi effettuare un'altra chiamata al componente "fatture" per ottenere le fatture per questo cliente. L'entità Cliente non può avere una proprietà Ordini, perché gli Ordini sono mappati in un altro componente.

Qualcuno ha qualche consiglio? Ho trascurato qualcosa?

    
posta EagleBeak 05.07.2012 - 14:43
fonte

2 risposte

3

Sembra un layout relativamente pulito e incapsulato delle strutture di dati sottostanti.

Mentre ci sono argomenti da fare contro l'incapsulamento, non sono sicuro che nessuno di loro sia valido in questo caso. (Né sono validi in ogni caso, ma sto cercando di essere generoso qui e non mostrare il mio pregiudizio.)

Ecco alcuni dei vantaggi che vedo ottenere:

  • Facile capacità di identificare le strutture necessarie per assemblare le informazioni. In questo modo si traduce in una curva di apprendimento più breve nella comprensione dell'applicazione.
  • Ambito chiaramente definito per ciò che deve essere testato quando si verificano cambiamenti.
  • Flessibilità di adattare la logica aziendale mentre l'azienda cambia alle strutture dati sottostanti.

Comprensibilmente, non puoi fornire tutti i dettagli dello stack di applicazioni. Quindi, presumibilmente, stai incontrando problemi e / o ti sembra ingombrante apportare cambiamenti a livello di business logic. Hai preso in considerazione l'aggiunta di un livello intermedio che fornisce gli oggetti composti che stai cercando?
In altre parole, avere un oggetto che combina fatture + informazioni sul cliente in modo che la vista o il modello di visualizzazione possano manipolare quell'oggetto invece di avere due oggetti diversi con cui lavorare.
Lo svantaggio di questo approccio è che è più codice da scrivere e mantenere. Potrebbe valere o meno lo sforzo aggiuntivo.

    
risposta data 05.07.2012 - 15:53
fonte
0

La mia regola generale quando si tratta di ORM è di mantenere un componente per schema di database, se si dispone di componenti separati per gestire lo stesso database, sarei d'accordo sul fatto che manchi dei vantaggi di ORM.

    
risposta data 05.07.2012 - 16:09
fonte

Leggi altre domande sui tag