Apa strategi pembungkus terbaik?

8

Saya berencana untuk mengintegrasikan alat eksternal ( ffmpeg dalam kasus khusus saya, tapi itu bisa apa saja, pada kenyataannya, sama seperti tugas-tugasnya adalah yang berjalan lama). Alat ini memiliki banyak parameter baris perintah.

Untuk saat ini, saya telah melakukan hal-hal sederhana dengan itu, sudah meminta saya banyak tulisan kelas, untuk menanamkan semua informasi yang dapat dikembalikan kepada saya.

Saya sekarang menghadapi tugas yang lebih kompleks lagi karena harus mengirimnya banyak parameter dan untuk menangani kemungkinan kesalahan.

Jadi, apa cara terbaik untuk itu?

  1. Buat kelas yang berisi semua opsi yang memungkinkan
  2. Mengandalkan setara terbalik dari commons-cli / CliBuilder / OptionParser
  3. Langsung tulis semua opsi dari input pengguna
  4. Kekuatan Obiwan Kenobi (atau apa pun yang saya bahkan tidak tahu)

Harap perhatikan bahwa saya melakukannya dalam bahasa yang tidak biasa (demi saya, jangan tanya saya apa itu, karena terlihat seperti persatuan yang putus asa dan steril antara CoffeeScript dan lua ), sebagai konsekuensinya, tidak ada kerangka kerja yang melakukan apa yang saya inginkan dalam bahasa yang saya gunakan.

Riduidel
sumber
Pertanyaan ini terkait dengan pemrograman, dan karena itu benar-benar dimiliki oleh StackOverflow.
Tom Anderson
2
Yah, saya mengajukan pertanyaan saya ke papan tulis, bukan keyboard. Dan inilah mengapa saya bertanya di sini.
Riduidel
1
MC Frontalot. Oh, tunggu, Anda mengatakan yang terbaik w rap strategi.
Jason Baker

Jawaban:

3

Saya kira jawaban ortodoks adalah untuk mencari tahu apa model domain yang diwujudkan oleh alat, kemudian menulis beberapa objek yang mengekspresikan model itu dalam bahasa Anda dan tahu bagaimana membangun garis perintah. Saya tidak tahu ffmpeg dengan baik, tetapi saya percaya model ini mengalir dari file sumber ke file output, masing-masing dalam format tertentu, melalui serangkaian filter. Jadi mungkin Anda memiliki kelas FfmpegJob yang memiliki dua objek SoundFile, satu untuk input dan satu untuk output, dan daftar (yang bisa kosong) dari objek SoundFilter. Setiap objek bawahan memiliki metode untuk mengubah dirinya menjadi urutan argumen untuk ffmpeg (misalnya HighpassFilter akan berubah menjadi {"--highpass", "200"} atau apa pun). Kelas pekerjaan kemudian dapat dengan mudah membangun baris perintah dari bawahannya. Anda perlu menulis kelas per opsi, tetapi Anda dapat mengangkat kode umum ke superclass; setiap subkelas harus cukup sederhana.

Ini melibatkan lebih banyak pelat baja daripada pendekatan reverse-optparse, tetapi memberi Anda keamanan tipe. Juga, ini memberi Anda tempat dari mana Anda dapat mulai menggantung lebih banyak fungsi: Anda dapat menempatkan validasi atau perhitungan dalam objek filter, atau menyusun beberapa opsi ke dalam filter tunggal yang lebih canggih.

Tom Anderson
sumber
Sial, saya lupa menyebutkan bahwa bahasa pilihan saya BUKAN typesafe.
Riduidel
Tidak masalah. Saya akan melakukannya dengan cara ini di Python juga.
Tom Anderson