Parece que está creando una interfaz que realiza una de varias operaciones distintas con cada invocación. No estoy seguro si se refiere a una aplicación de "línea de comando" (que hace una acción, luego sale) o una aplicación de CLI (que muestra un mensaje y responde repetidamente a la entrada del usuario). En general, el primero será mucho más simple de construir que el segundo; Creo que tiene sentido utilizar una CLI si su aplicación requiere un estado persistente que evoluciona en varios comandos. Si estás abordando algo como esto, entonces alphaZero es correcto; probablemente deberías aprender sobre REPLs y copiar uno bueno.
En cualquier caso, la operación se realice dependerá de los argumentos que se pasan en la línea de comandos, así que voy a una lluvia de ideas acerca de esa parte ...
Es a pensar sensible de la aplicación como un conjunto de distintas " Comando "objetos", uno para cada tipo de operación. El punto de entrada a la aplicación debería ser, por lo tanto, un tipo de objeto CommandLineDispatcher que distribuye solicitudes al objeto Command correspondiente.
Para ser modular, el despachador se debe configurar con un mapeo abstraído (por ejemplo, una Hashtable) para asociar cada token de comando (generalmente la primera palabra de la cadena de línea de comando) al objeto Command que lo maneja. El despachador también puede manejar opciones comunes de análisis, probablemente usando alguna biblioteca "getopts" estándar para hacer el trabajo pesado.
Para empezar simple, cada objeto de comando podría implementar una interfaz coherente para hacer su trabajo; tal vez algo como esto:
public void execute(List<String> args)
De esta manera, el despachador de punto de entrada solo se solicita se encuentra el Comando, y executes
ella.
En cuanto a la gestión de errores: el método execute()
podría arrojar una excepción para comunicar errores ... Excepción podría ser capturada y procesada por el despachador, o simplemente iniciar sesión en la pantalla. Alternativamente, los Comandos fallidos podrían invocar alguna función de usage
compartida para combinar un mensaje de error con instrucciones generales. No creo que el "punto de entrada" deba ser necesariamente consciente de los problemas que sugiera; si necesita un manejo robusto de errores (por ejemplo, para las capacidades de registro o alerta), parece que pertenece a un componente separado que podría proporcionarse al objeto Command.
En general, una aplicación de línea de comandos no es diferente de cualquier otra aplicación que responda a la entrada del usuario; necesitará un despachador para analizar y enrutar la entrada y controladores (también conocidos como "controladores") para ejecutar el operaciones compatibles. Si necesita otros servicios (registro, alertas, conectividad de base de datos, etc.), hará bien en crear componentes separados para aislar esta lógica y exponerla con interfaces limpias.
Las aplicaciones de consola son generalmente utilitaria en la naturaleza. Es posible que tengas una mejor experiencia de aprendizaje y encuentres muchas más aplicaciones de muestra, conectando con widgets a las aplicaciones de escritorio de WinForms. – DOK
consola schmonsole. Se trata de aprender OO antes de programar OO. Un punto de partida decente es leer Code Complete. – Will