Qual è la migliore strategia di fasciatura?

8

Ho intenzione di integrare uno strumento esterno ( ffmpeg nel mio caso particolare, ma potrebbe essere qualsiasi cosa, infatti, come lolng come i suoi compiti sono quelli a lungo in esecuzione). Questo strumento ha molti dei parametri della riga di comando.

Per ora, ho fatto delle cose semplici, mi ha già richiesto un bel po 'di scrittura di classe, per incorporare tutte le informazioni che può restituirmi.

Ora affronto il compito ancora più complesso di dover inviare un gruppo di parametri e per gestire possibili errori.

Quindi, qual è il modo migliore per farlo?

  1. Crea classi contenenti tutte le opzioni possibili
  2. Basandosi su un equivalente inverso di commons-cli / CliBuilder / OptionParser
  3. Scrivi direttamente tutte le opzioni dall'input dell'utente
  4. Potenze di Obiwan Kenobi (o qualsiasi cosa di cui non sappia nemmeno io)

Notare che lo faccio in un linguaggio non comune (per il mio interesse, non chiedermi di cosa si tratta, in quanto sembra un'unione disperata e sterile tra CoffeeScript e lua ), di conseguenza, non ci può essere framework che fa cosa Voglio nella lingua che uso.

    
posta Riduidel 29.12.2010 - 11:39
fonte

1 risposta

3

Suppongo che la risposta ortodossa sarebbe quella di capire quale modello di dominio lo strumento incarna, quindi scrivere alcuni oggetti che esprimono quel modello nella tua lingua e sanno come costruire le linee di comando. Non conosco bene ffmpeg, ma credo che il modello sia un suono che scorre da un file sorgente a un file di output, ognuno in un formato particolare, attraverso una serie di filtri. Quindi potresti avere una classe FfmpegJob che ha due oggetti SoundFile, uno per l'input e uno per l'output e un elenco (che potrebbe essere vuoto) degli oggetti SoundFilter. Ogni oggetto subordinato ha un metodo per trasformarsi in una sequenza di argomenti per ffmpeg (ad esempio un HighpassFilter si trasformerebbe in {"--highpass", "200"} o qualsiasi altra cosa). La classe di lavoro può quindi facilmente costruire una riga di comando dai suoi subordinati. È necessario scrivere una classe per opzione, ma è possibile sollevare il codice comune in una superclasse; ogni sottoclasse dovrebbe essere piuttosto semplice.

Questo implica più standard di riferimento rispetto a un approccio di tipo reverse-optparse, ma ti offre la sicurezza del tipo. Inoltre, ti dà un posto da cui puoi iniziare ad appendere più funzionalità: puoi mettere la validazione o il calcolo negli oggetti filtro, o comporre diverse opzioni in un singolo filtro più sofisticato.

    
risposta data 29.12.2010 - 17:25
fonte

Leggi altre domande sui tag