Sono in fase di progettazione un'applicazione per emettere e archiviare fatture per un'organizzazione. Il problema è che l'organizzazione non è affatto stabile. Esistono molti tipi di fatture che possono aumentare e cambiare.
Per prima cosa, ho provato a utilizzare le tabelle nel mio DAL, una tabella per archiviare le fatture, una per i campi fattura e una per i valori dei campi fattura. Il problema era che in questo modo è necessario Reflection per rilevare i campi in un secondo momento, e questo potrebbe rallentare l'applicazione quando la fattura contiene molti articoli.
In secondo luogo, ho cercato di mantenere il nucleo dei dati della fattura come due tabelle: fatture e articoli della fattura. Altri campi sono completamente estraibili da altri tavoli. Voglio dire, Business Layer dovrebbe fornire risultati diversi per tipo di fattura. Dovrebbe scegliere le domande giuste e elaborare i risultati in base al tipo di fattura. Due problemi con questa soluzione sono:
-
Ho ancora un sacco di join tra le altre tabelle quando voglio mostrarlo una fattura, per ogni articolo di fattura. Dovrei ricalcolare tutto ogni volta per ogni articolo di fattura.
-
Cosa succede se la tabella degli articoli della fattura non supporta un nuovo tipo di fattura? Quindi probabilmente dovrei aggiungere una nuova tabella per memorizzare quel tipo di articoli delle fatture.
-
Il mio cliente mi ha chiesto di conservare tutti i dati relativi a una fattura, lo fanno non voglio che lo ricalcoli ogni volta Vogliono qualcosa come un istantanea dei dati correlati al momento della creazione della fattura.
Ora, cosa penso posso utilizzare il vantaggio di XML nella tabella? Posso salvare la fattura, con qualsiasi campo come xml.
- Posso salvare la versione diversa delle loro fatture.
- In caso di modifiche, aggiorno solo Business.dll e non è richiesta alcuna modifica DAL.
- Da Linq a XML non è lento.
Che cosa suggerisci?