567 messaggi dal 18 marzo 2002
Ho realizzato un'applicazione console che esegue l'importazione nel db di un flusso di dati anche di notevoli dimensioni, la cui esecuzione può richiedere anche qualche ora.
Questa applicazione è attualmente in uso presso vari clienti, quello che mi viene richiesto da alcuni è la possibilità di fare eseguire a fine importazione (che è una procedura standard, uguale per tutti) altre elaborazioni di corredo che hanno significato solo per il cliente che le richiede.
Come potrei gestire la cosa in maniera più modulare possibile senza duplicazione di codice che comporterebbe in caso di modifiche una serie di complicazioni non indifferente ?

Grazie
2.198 messaggi dal 30 novembre 2001
puoi aggiungere una voce nel file di configurazione il cui valore ti dice se eseguire o meno le operazioni a fine importazione, oppure passarlo come parametro iniziale all'applicazione.
Quoto chiccosimo.
Un'altra soluzione (ma decisamente più complessa da realizzare anche se in certi scenari decisamente preferibile) è quella di gestire un plugin provider per cui l'applicazione carica automaticamente un assembly aggiuntivo specifico per il singolo cliente.
HTH

Matteo Casati
GURU4.net
567 messaggi dal 18 marzo 2002
Ciao Matteo,
premesso che la soluzione di chiccosimo potrebbe andarmi bene, mi interesserebbe avere qualche informazione in più sulla tua soluzione.
Immagina di avere 3 clienti: il primo ha l'importazione standard, il secondo a fine importazione necessita di una procedura che scrive dei dati in un file excel, il terzo dopo l'importazione esegue delle select e popola delle tabelle con i risultati delle query.
In base a questo scenario io vorrei avere un progetto standard uguale per tutti (dll che hanno tutti i clienti), agli ultimi due clienti vorrei fornire delle dll aggiuntive contenenti le procedure personalizzate, come posso realizzare ciò e come faccio dalla parte standard a chiamare le procedure personalizzate soltanto quando ce nè bisogno ?

Grazie PGH
Lo scenario che avevo immaginato è esattamente quello da te descritto.
Come ti dicevo non è una soluzione semplice da implementare (non so quale sia il tuo livello di seniority) e - soprattutto - impossibile da illustrare in un post nel forum.
Concettualmente quel che devi fare è definire un'interfaccia che descriva l'extra-job da eseguire e fornire per ogni implementazione che ti serve (ovvero per ciascuna procedura richiesta dai tuoi clienti) una dll. Attraverso il file di configurazione di ogni installazione definisci quindi quale modulo (DLL) deve essere caricato e, al termine del processo standard, esegui mediante reflection il load dell'assembly necessario e ne invochi il metodo.
Ok, tradurre questo in codice non è semplicissimo ma se cerchi un po' (ad esempio puoi provare una query tipo "c# plugin architecture sample") trovi sicuramente qualche articolo esaustivo (quello su codeproject - http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx potrebbe ad esempio essere un buon punto di partenza)
Se poi decidessi di percorrere questa strada e ti verranno dei dubbi più specifici... beh, sai dove trovarci
HTH

Matteo Casati
GURU4.net

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.