È meglio chiamare un'applicazione esterna da riga di comando o internalizzare la logica di quella applicazione?

10

Ho una sorta di processo "pipeline" che essenzialmente collega solo una serie di strumenti esistenti per automatizzare un flusso di lavoro. Per uno dei passaggi, c'è uno strumento da riga di comando esistente che già fa la carne di ciò che deve fare quel passo.

Lo strumento CLI esterno è basato su java, così come la mia pipeline, quindi sarebbe possibile integrare lo strumento direttamente nel passo della pipeline, ma lo strumento è molto complesso ed è attualmente strettamente legato all'input della riga di comando (qualcosa come 37 opzioni di flag di configurazione).

La domanda è: è un'idea migliore chiamare semplicemente e invocare il processo esterno, o sarebbe meglio integrare il codice esterno all'interno della mia applicazione?

Quali sono i pro / contro dell'integrazione contro la chiamata al processo esterno?

    
posta cdeszaq 01.02.2012 - 16:38
fonte

4 risposte

12

Is it a better idea to simply call out and invoke the external process, or would it be better to integrate the external code within my application?

È molto meglio integrare queste cose.

L'interfaccia della riga di comando è solo un'interfaccia e particolarmente terribile. È essenziale ma è anche pieno di stranezze e limitazioni che non sono sensibili.

Ciascuno degli "strumenti esistenti per automatizzare un flusso di lavoro" dovrebbe avere una classe ordinata che esegue il vero lavoro dopo le opzioni della riga di comando sono state analizzate.

Idealmente, la funzione public static void main fa due cose in ciascuno di quegli "strumenti esistenti".

  1. Richiama qualche opzione da riga di comando / argomento parser.

  2. Invoca la classe ordinata che fa il vero lavoro. Pensa ad un compito Ant o ad un compito Maven che fa il vero lavoro dopo che Ant o Maven hanno gestito tutto l'analisi e il processo decisionale.

Quando vai ad integrare queste cose, vuoi le classi ordinate che fanno il vero lavoro.

Se non esistono, dovrai riscrivere tutti questi strumenti per creare la classe ordinata che fa il vero lavoro, separata da tutta l'analisi della riga di comando.

Per una guida su come queste classi ordinate dovrebbero funzionare, leggi Ant (o Maven) per vedere come definiscono le varie attività dei lavoratori. È un buon modello mentale per come molteplici e disparate cose sono integrate senza tornare alla riga di comando.

    
risposta data 01.02.2012 - 16:43
fonte
8

Direi di lasciarlo in pace se funziona.

In quanto programmatore, dai valore alla tua organizzazione risolvendo i problemi con il software. La risoluzione di più problemi di qualità e quantità in un dato periodo di tempo è direttamente correlata al valore dell'organizzazione. Spendere questo tempo per creare codice diminuisce il tuo valore poiché ti porta via dalla risoluzione di un problema più importante.

Tuttavia, un paio di fattori che potrebbero attenuare il tempo necessario sarebbe la scalabilità e se ci fossero problemi per la stabilità dei programmi esterni.

    
risposta data 01.02.2012 - 17:17
fonte
5

Non è "migliore" o "peggio". Ci sono semplicemente diversi costi e benefici.

Spesso è più costoso scrivere e mantenere un pezzo di software, maggiore è il numero di punti di integrazione rispetto alla complessità aggiunta.

  • Una funzione che scrivi ha un costo di integrazione molto basso.
  • Una libreria di terze parti ha un costo di integrazione leggermente maggiore.
  • Un programma separato che devi eseguire avrà un costo di integrazione ancora maggiore.

Nota: questi sono costi di integrazione che devi valutare rispetto al costo totale che include, tra le altre cose, il costo per la scrittura e la manutenzione del software.

Può darsi che tu sia un programmatore molto inesperto, ma un utente esperto da molto tempo.

  • Se dovessi "sborsare" il tuo costo totale potrebbe essere basso nonostante il maggiore costo di integrazione, perché puoi mitigare i costi di integrazione con la tua esperienza e conoscenza.
  • Se dovessi scrivere tu stesso la funzione, il tuo costo totale potrebbe essere piuttosto elevato nonostante il basso costo di integrazione a causa della tua programmazione di inesperienza.

Il modo migliore per capire:

Is it better idea to call an external command-line application or to internalize that application's logic?

È calcolare i costi per te stesso. Il costo sarà diverso per diversi ambienti, situazioni e persone. La maggior parte delle volte costerà di più richiamare la riga di comando, ma non sempre e l'unico modo per essere sicuri che faccia l'analisi.

    
risposta data 02.02.2012 - 00:01
fonte
1

Idealmente vorrai integrarlo. Soprattutto se si tratta di un'app che viene distribuita, riducendo il numero di dipendenze e le configurazioni sarà più facile. Ma è ovviamente un problema di costi / benefici per il tuo caso specifico.

Detto questo, una cosa da considerare è la stabilità. Ho incontrato qualcosa di simile un paio di anni fa e ho mantenuto il programma cli in atto. Era troppo instabile e non volevo che il suo si bloccasse per rimuovere l'applicazione genitore, che doveva essere eseguita 24/7. Ora non si trattava di un'app java, ma nondimeno, se si tratta di un problema che potresti applicare, potresti tenerne conto.

    
risposta data 03.02.2012 - 05:40
fonte

Leggi altre domande sui tag