Was ist die beste Verpackungsstrategie?

8

Ich plane, ein externes Tool zu integrieren ( ffmpeg in meinem speziellen Fall, aber es könnte alles sein, so lang wie seine Aufgaben langwierig sind). Dieses Tool verfügt über viele Befehlszeilenparameter.

Im Moment habe ich einfache Dinge damit gemacht, und ich musste bereits eine Menge Unterricht schreiben, um alle Informationen einzubetten, die mir zurückgegeben werden können.

Ich stehe jetzt vor der noch komplexeren Aufgabe, eine Reihe von Parametern senden und mögliche Fehler behandeln zu müssen.

Also, was ist der beste Weg dafür?

  1. Erstellen Sie Klassen mit allen möglichen Optionen
  2. Verlassen Sie sich auf ein umgekehrtes Äquivalent von commons-cli / CliBuilder / OptionParser
  3. Schreiben Sie alle Optionen direkt aus Benutzereingaben
  4. Obiwan Kenobi Kräfte (oder alles, was ich nicht einmal weiß)

Bitte beachten Sie, dass ich es in einer ungewöhnlichen Sprache mache (fragen Sie mich nicht, was es ist, da es wie eine verzweifelte und sterile Vereinigung zwischen CoffeeScript und lua aussieht ). Infolgedessen kann es keinen Rahmen geben was ich in der Sprache will, die ich benutze.

Riduidel
quelle
Diese Frage bezieht sich auf die Programmierung und gehört als solche wirklich zu StackOverflow.
Tom Anderson
2
Nun, ich stelle meine Frage an das Whiteboard, nicht an die Tastatur. Und deshalb habe ich es hier gefragt.
Riduidel
1
MC Frontalot. Oh , Moment mal, Sie haben gesagt die beste w Strategie rappen.
Jason Baker

Antworten:

3

Ich nehme an, die orthodoxe Antwort wäre, herauszufinden, welches Domänenmodell das Tool verkörpert, und dann einige Objekte zu schreiben, die dieses Modell in Ihrer Sprache ausdrücken und wissen, wie man Befehlszeilen erstellt. Ich kenne ffmpeg nicht gut, aber ich glaube, das Modell ist ein Ton, der durch eine Reihe von Filtern von einer Quelldatei zu einer Ausgabedatei in einem bestimmten Format fließt. Vielleicht haben Sie eine FfmpegJob-Klasse mit zwei SoundFile-Objekten, einem für die Eingabe und einem für die Ausgabe, und einer Liste (die leer sein kann) von SoundFilter-Objekten. Jedes untergeordnete Objekt verfügt über eine Methode, um sich in eine Folge von Argumenten für ffmpeg umzuwandeln (z. B. würde ein HighpassFilter zu {"--highpass", "200"} oder was auch immer werden). Die Jobklasse kann dann leicht eine Befehlszeile aus ihren Untergebenen erstellen. Sie müssen eine Klasse pro Option schreiben. Sie können den allgemeinen Code jedoch in eine Oberklasse aufheben. Jede Unterklasse sollte ziemlich einfach sein.

Dies beinhaltet mehr Boilerplate als ein Reverse-Optparse-Ansatz, bietet Ihnen jedoch Sicherheit. Außerdem erhalten Sie einen Ort, an dem Sie mehr Funktionen aufhängen können: Sie können Validierung oder Berechnung in die Filterobjekte einfügen oder mehrere Optionen in einem einzigen komplexeren Filter zusammenfassen.

Tom Anderson
quelle
Verdammt, ich habe vergessen zu erwähnen, dass meine Sprache der Nichtwahl NICHT typsicher ist.
Riduidel
Ist egal. Ich würde es auch in Python so machen.
Tom Anderson