Ich habe eine Art "Pipeline" -Prozess, der im Wesentlichen nur eine Reihe vorhandener Tools miteinander verbindet, um einen Workflow zu automatisieren. Für einen der Schritte gibt es ein vorhandenes Befehlszeilentool, das bereits das erledigt, was dieser Schritt tun muss.
Das externe CLI-Tool basiert auf Java, ebenso wie meine Pipeline. Es wäre also möglich, das Tool direkt in den Pipeline-Schritt zu integrieren. Das Tool ist jedoch sehr komplex und derzeit eng mit der Eingabe über die Befehlszeile verbunden (so etwas wie) 37 Konfigurationsflag-Optionen).
Die Frage ist: Ist es eine bessere Idee, einfach den externen Prozess aufzurufen und aufzurufen, oder wäre es besser, den externen Code in meine Anwendung zu integrieren?
Was sind die Vor- und Nachteile der Integration gegenüber dem Aufruf des externen Prozesses?
quelle
Antworten:
Es ist viel besser, diese Dinge zu integrieren.
Die Befehlszeilenschnittstelle ist nur eine Schnittstelle, und eine besonders schreckliche. Es ist wichtig, aber es ist auch voller Macken und Einschränkungen, die nicht sinnvoll sind.
Jedes der "vorhandenen Tools zur Automatisierung eines Workflows" sollte eine ordentliche Klasse haben, die die eigentliche Arbeit erledigt, nachdem die Befehlszeilenoptionen analysiert wurden.
Im Idealfall führt die
public static void main
Funktion in jedem dieser "vorhandenen Tools" zwei Dinge aus.Es ruft einen Befehlszeilenoptions- / Argumentparser auf.
Es ruft die ordentliche Klasse auf, die die eigentliche Arbeit erledigt. Stellen Sie sich eine Ant-Aufgabe oder eine Maven-Aufgabe vor, die die eigentliche Arbeit erledigt, nachdem Ant oder Maven die gesamte Analyse und Entscheidungsfindung durchgeführt haben.
Wenn Sie diese Dinge integrieren möchten, möchten Sie die ordentlichen Klassen, die die eigentliche Arbeit erledigen.
Wenn sie nicht vorhanden sind, müssen Sie alle diese Tools neu schreiben, um die ordentliche Klasse zu erstellen, die die eigentliche Arbeit erledigt, getrennt von allen Befehlszeilenanalysen.
Lesen Sie Ant (oder Maven), um zu erfahren, wie diese verschiedenen Klassen funktionieren. Es ist ein gutes mentales Modell dafür, wie mehrere unterschiedliche Dinge integriert werden, ohne zur Befehlszeile zurückzukehren.
quelle
main
Ich würde sagen, lass es in Ruhe, wenn es funktioniert.
Als Programmierer bringen Sie Wert in Ihr Unternehmen, indem Sie Probleme mit Software lösen. Die Lösung weiterer Qualitäts- und Quantitätsprobleme innerhalb eines bestimmten Zeitraums hängt direkt mit Ihrem Wert in der Organisation zusammen. Wenn Sie diese Zeit für die Erstellung von Code verwenden, verringert sich Ihr Wert, da Sie kein wichtigeres Problem lösen müssen.
Einige Faktoren, die den Zeitaufwand verringern könnten, wären jedoch die Skalierbarkeit und Bedenken hinsichtlich der Stabilität externer Programme.
quelle
Es ist nicht "besser" oder "schlechter". Es gibt einfach unterschiedliche Kosten und Nutzen.
Das Schreiben und Warten einer Software ist oft teurer, je mehr Integrationspunkte für die zusätzliche Komplexität erforderlich sind.
Beachten Sie, dass dies Integrationskosten sind, die Sie gegen die Gesamtkosten abwägen müssen, zu denen unter anderem die Kosten für das Schreiben und Warten von Software gehören.
Es kann sein, dass Sie ein sehr unerfahrener Programmierer sind, aber ein langjähriger Power-User.
Der beste Weg, um herauszufinden:
Ist es, die Kosten selbst zu berechnen. Die Kosten sind für verschiedene Umgebungen, Situationen und Personen unterschiedlich. Meistens kostet es mehr, die Befehlszeile aufzurufen, aber nicht immer und der einzige Weg, um sicherzugehen, dass die Analyse durchgeführt wird.
quelle
Idealerweise möchten Sie es integrieren. Besonders wenn es sich um eine App handelt, die verteilt wird - die Reduzierung der Anzahl von Abhängigkeiten und Konfigurationen erleichtert dies. Aber es ist natürlich ein Kosten-Nutzen-Problem für Ihren speziellen Fall.
Eine Sache, die berücksichtigt werden muss, ist die Stabilität. Ich bin vor ein paar Jahren auf etwas Ähnliches gestoßen und habe das Cli-Programm beibehalten. Es war zu instabil, und ich wollte nicht seine Krachen die übergeordnete Anwendung herunterzunehmen, die 24/7 laufen benötigt. Dies war keine Java-App, aber dennoch, wenn es sich um ein Problem handelt, das möglicherweise zutrifft, sollten Sie dies berücksichtigen.
quelle