Più l'input è strutturato in modo approssimativo, più difficile sarà analizzarlo. In questo modo, XML è già strutturato in modo approssimativo. Quando ottengo il tag <price/>
, mi aspetto che sia un numero, come <price>59.90</price>
, ma nulla, in XML, garantisce che effettivamente riceverò un numero. Che dire di <price>USD59.90</price>
o <price>59,90 €</price>
o <price>I don't know what to put here because I'm lazy to read the API</price>
?
La parte interessante è che puoi convalidare l'XML con DTD. Lo stesso non vale per Excel.
Più il formato dei dati è vicino all'utente, più casuali saranno questi dati. Solo perché gli utenti apprezzano la possibilità per loro di aggiungere fogli in Excel o riordinare colonne, ecc. E si aspettano che qualsiasi parser utilizzi i dati di Excel in grado di capire ancora dove si trovano i dati e come viene salvato.
Ho dovuto lavorare su un'applicazione che ha analizzato alcuni documenti PDF. Una volta, il telefono ha suonato nel dipartimento di supporto IT. Il cliente stava urlando su come l'applicazione fa schifo: quando invia il suo PDF, l'applicazione risponde che il PDF non contiene testo. Quando il cliente ci ha finalmente inviato il PDF, abbiamo capito immediatamente che cosa non andava: era un documento scansionato senza OCR: ogni pagina conteneva solo una bitmap con il testo scansionato. Per questo cliente, era ancora testo e la nostra app avrebbe dovuto leggerlo come qualsiasi altro documento di testo.
Questa casualità rende molto difficile lavorare con quei file. In XML, ti aspetti almeno una struttura. Che cosa succede se si deve analizzare:
<product>
<product <title>Product 1
price="59.90
in-stock >19<
<product> title=Product 2
price="Fourty nine USD ;
inStock = 62
</products>
Questo è ancora XML e l'utente non capirebbe perché la tua stupida app non possa analizzare qualcosa di simile, mentre è molto chiaro.
Ora torniamo agli argomenti che puoi dare al tuo stakeholder senza alcun background tecnico:
1. Come verrà notificato il servizio di integrazione?
Con un servizio web, è facile. Lo invochi, inviando i dati delle risorse umane ad esso, e questo è tutto.
Con un file Excel su un'unità di rete, le cose si complicano:
-
O il servizio di integrazione controlla costantemente i nuovi file su questa unità, nel qual caso ciò avrà un impatto importante in termini di larghezza di banda (inoltre, se l'unità di rete è inaffidabile, potrebbero sorgere anche più problemi),
-
Oppure il servizio di integrazione deve essere richiamato dopo aver salvato il file Excel, nel qual caso invece di utilizzare direttamente il servizio Web, si sta utilizzando l'unità di rete, quindi un servizio Web.
2. Il caricamento dei dati da Excel è costoso
2. un. In termini di costi immediati
Qualsiasi linguaggio di programmazione decente può analizzare XML. Nessuno, credo, può leggere i file di Excel. Per poterli leggere, è necessario utilizzare COM di Microsoft Excel (che è limitato alla versione desktop e non può essere eseguito sul lato server) o alcuni prodotti di terze parti a pagamento.
2. b. In termini di risorse
Non ho i risultati del profiler per supportare questo, ma molto probabilmente il caricamento dei dati da un file Excel costerebbe molto di più in termini di CPU e quindi l'analisi di XML.
3. Il caricamento dei dati da Excel è soggetto a errori
I file di Excel hanno un problema: vengono modificati dagli utenti e gli utenti possono apportare qualsiasi modifica. Cosa succede se rinominano una colonna? Cosa succede se aggiungono un foglio prima di quello che devi analizzare? Cosa succede se esportano i dati di Excel in un formato che non ti aspetti?
Ecco la conclusione per lo stakeholder senza background tecnici:
Cost effective, you say?
Let's see. With the Excel on a network drive approach, you would need to develop two systems instead of one, given that one of the systems will be hugely error prone (heavily increasing the maintenance cost) and would require buying licenses and more powerful servers.
Higher infrastructure cost;
Higher development cost;
Higher maintenance cost.