Sembra che tu stia costruendo un'interfaccia che esegue una delle numerose operazioni distinte con ogni invocazione. Non sono sicuro se ti riferisci a un'applicazione "da riga di comando" (che esegue un'azione, poi esce) o un'applicazione CLI (che visualizza un prompt e risponde ripetutamente all'input dell'utente). In generale, il primo sarà molto più semplice da costruire rispetto al secondo; Penso che abbia senso solo usare una CLI se l'applicazione richiede uno stato persistente che evolve su più comandi. Se stai affrontando qualcosa come questo, allora alphazero è corretto - dovresti probabilmente imparare REPL e copiarne uno buono.
In ogni caso, l'operazione eseguita dipenderà gli argomenti passati sulla riga di comando, quindi mi brainstorming di quella parte ...
Si pensi sensibile dell'applicazione come un insieme di distinti " Comanda "oggetti, uno per ogni tipo di operazione. Il punto di accesso all'applicazione dovrebbe quindi essere una sorta di oggetto CommandLineDispatcher che invia richieste all'oggetto Command appropriato.
Per essere modulare, il dispatcher deve essere configurato con una mappatura astratta (ad esempio un Hashtable) per associare ciascun token di comando (di solito la prima parola della stringa della riga di comando) all'oggetto Command che lo gestisce. Il dispatcher può anche gestire l'analisi delle opzioni comuni, probabilmente usando una libreria "getopts" pronta per il sollevamento pesante.
Per iniziare in modo semplice, ciascun oggetto Command può implementare un'interfaccia coerente per eseguire il proprio lavoro; forse qualcosa di simile:
public void execute(List<String> args)
In questo modo, il dispatcher entry-point trova solo il Comando stato richiesto, e executes
esso.
Riguardo alla gestione degli errori: il metodo execute()
potrebbe semplicemente generare un'eccezione per comunicare errori ... È possibile che l'eccezione venga rilevata ed elaborata dal dispatcher o semplicemente registrata sullo schermo. In alternativa, i comandi in errore potrebbero richiamare alcune funzioni condivise di usage
per combinare un messaggio di errore con istruzioni generali. Non credo che il "punto di ingresso" debba essere necessariamente reso consapevole dei problemi che suggerisci; se hai bisogno di una solida gestione degli errori (ad esempio, per le funzionalità di registrazione o di avviso), sembra che appartenga a un componente separato che potrebbe essere fornito all'oggetto Command.
In generale, un'applicazione della riga di comando non è diversa da qualsiasi altra applicazione che risponde all'input dell'utente: è necessario un dispatcher per analizzare e instradare l'input e gestori (ovvero "controller") per eseguire l'operazione. operazioni supportate. Se hai bisogno di altri servizi (registrazione, avviso, connettività del database, ecc.), Farai bene a creare componenti separati per isolare questa logica ed esporla con interfacce pulite.
applicazioni console sono generalmente utilitaristico in natura. Potresti avere una migliore esperienza di apprendimento - e trovare molte altre app di esempio - avviando le app desktop di WinForms. – DOK
Console schmonsole. Si tratta di imparare OO prima di programmare OO. Un buon punto di partenza è leggere il codice completo. – Will