Tengo un tipo de proceso de "canalización" que esencialmente es solo unir un conjunto de herramientas existentes para automatizar un flujo de trabajo. Para uno de los pasos, hay una herramienta de línea de comandos existente que ya hace la carne de lo que ese paso debe hacer.
La herramienta CLI externa está basada en Java, y también lo es mi canalización, por lo que sería posible integrar la herramienta directamente en el paso de canalización, pero la herramienta es muy compleja y actualmente está estrechamente vinculada a tener una entrada de línea de comandos (algo así como 37 opciones de bandera de configuración).
La pregunta es: ¿es una mejor idea simplemente llamar e invocar el proceso externo, o sería mejor integrar el código externo dentro de mi aplicación?
¿Cuáles son las ventajas y desventajas de integrar frente a llamar al proceso externo?
fuente
Respuestas:
Es mucho mejor integrar estas cosas.
La interfaz de línea de comandos es solo una interfaz, y particularmente horrible. Es esencial, pero también está lleno de caprichos y limitaciones que no son sensibles.
Cada una de las "herramientas existentes para automatizar un flujo de trabajo" debe tener una clase ordenada que haga el trabajo real después de analizar las opciones de la línea de comandos.
Idealmente, la
public static void main
función hace dos cosas en cada una de esas "herramientas existentes".Invoca un analizador de opciones / argumentos de la línea de comandos.
Invoca la clase ordenada que hace el trabajo real. Piense en una tarea Ant o una tarea Maven que hace el trabajo real después de que Ant o Maven haya manejado todo el análisis y la toma de decisiones.
Cuando intentas integrar estas cosas, quieres las clases ordenadas que hacen el trabajo real.
Si no existen, tendrá que reescribir todas esas herramientas para crear la clase ordenada que hace el trabajo real, separada de todo el análisis de la línea de comandos.
Para obtener orientación sobre cómo deberían funcionar estas clases ordenadas, lea Ant (o Maven) para ver cómo definen las diversas tareas de los trabajadores. Es un buen modelo mental de cómo se integran cosas múltiples y dispares sin volver a la línea de comando.
fuente
main
método, los métodos de análisis de CLI, etc. Es bastante desagradable :(Yo diría que lo dejes en paz si funciona.
Como programador, usted aporta valor a su organización al resolver problemas con el software. Resolver más problemas en calidad y cantidad dentro de un período de tiempo determinado está directamente relacionado con su valor en la organización. Pasar este tiempo para crear código disminuye su valor, ya que le evita resolver un problema más importante.
Sin embargo, un par de factores que podrían mitigar el gasto del tiempo serían la escalabilidad y si hubiera alguna preocupación por la estabilidad de los programas externos.
fuente
No es "mejor" o "peor". Simplemente hay diferentes costos y beneficios.
A menudo es más costoso escribir y mantener una pieza de software cuanto mayor sea el número de puntos de integración a la complejidad adicional.
Tenga en cuenta que estos son costos de integración que debe comparar con el costo total, que incluye, entre otras cosas, el costo de escribir y mantener el software.
Puede ser que usted sea un programador muy inexperto, pero un usuario avanzado desde hace mucho tiempo.
La mejor manera de descubrirlo:
Es calcular los costos por ti mismo. El costo será diferente para diferentes entornos, situaciones y personas. La mayoría de las veces costará más llamar a la línea de comando, pero no siempre es la única forma de asegurarse de que realice el análisis.
fuente
Lo ideal sería integrarlo. Especialmente si esta es una aplicación que se distribuye, reducir la cantidad de dependencias y configuraciones lo hará más fácil. Pero, por supuesto, es un problema de costo / beneficio para su caso específico.
Dicho esto, una cosa a considerar es la estabilidad. Encontré algo similar hace un par de años y mantuve el programa cli en su lugar. Era demasiado inestable, y no quería que su bloqueo eliminara la aplicación principal, que necesitaba ejecutarse 24/7. Ahora, esta no era una aplicación de Java, pero no obstante, si es un problema que puede aplicarse, es posible que desee tenerlo en cuenta.
fuente