最良のラッピング戦略は何ですか?


8

私は外部ツールを統合するつもりです(私の特定のケースではffmpegですが、実際には、そのタスクが実行時間の長いものである限り、何でもかまいません)。このツールには、多くのコマンドラインパラメータがあります。

今のところ、私はそれを使って簡単なことをしましたが、それが私に返すことができるすべての情報を埋め込むために、クラスの大量の書き込みをすでに必要としています。

私は今、それをパラメータの束を送信することであっても、より複雑なタスクに直面し、可能性のあるエラーを処理するために。

それで、そのための最良の方法は何ですか?

  1. 可能なすべてのオプションを含むクラスを作成します
  2. commons-cli / CliBuilder / OptionParserの逆の同等物に依存
  3. ユーザー入力からすべてのオプションを直接書き込む
  4. オビワンケノービパワー(または私が知らないことすべて)

私はそれを一般的ではない言語で行うことに注意してください(私のために、それはCoffeeScriptluaの間の絶望的で無菌の結合のように見えるので、それが何であるかを私に尋ねないでください)、結果として、フレームワークで行うことはできません私が使用する言語で欲しいもの。


この質問はプログラミングに関連しているため、実際にはStackOverflowに属しています。
トムアンダーソン、

2
ええと、私はキーボードではなく、ホワイトボードに質問します。そして、この理由をここで尋ねました。
Riduidel、2010

1
MC Frontalot。あらまあ、あなたは最高のwラッピング戦略を言った。
Jason Baker、

回答:


3

正統な答えは、ツールが具現化するドメインモデルを理解し、そのモデルを言語で表現し、コマンドラインを構築する方法を知っているオブジェクトを書くことだと思います。私はffmpegをよく知りませんが、モデルはソースファイルから出力ファイルに、一連のフィルターを介してそれぞれ特定の形式で流れるサウンドであると思います。したがって、2つのSoundFileオブジェクト(1つは入力用、もう1つは出力用)と、SoundFilterオブジェクトのリスト(空の場合もあります)を持つFfmpegJobクラスがあるかもしれません。各従属オブジェクトには、それ自体をffmpegの引数のシーケンスに変換するメソッドがあります(たとえば、HighpassFilterは{"--highpass"、 "200"}などに変換されます)。ジョブクラスは、その部下からコマンドラインを簡単に構築できます。オプションごとにクラスを作成する必要がありますが、ただし、共通コードをスーパークラスに引き上げることができます。各サブクラスはかなり単純でなければなりません。

これには、reverse-optparseアプローチよりも多くのボイラープレートが含まれますが、タイプセーフを購入します。また、より多くの機能を掛け始めることができる場所を提供します。フィルターオブジェクトに検証または計算を配置したり、いくつかのオプションを1つのより高度なフィルターに構成したりできます。


くそー、私は私の選択のない言語はタイプセーフではないことを言及するのを忘れていました。
Riduidel、2010

関係ありません。私もPythonでこのようにします。
トムアンダーソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.