diseño de API: transmita objetos frente a funciones y mensajes

7

Estoy diseñando la API para una biblioteca de python que acepta una entrada asíncrona y produce la salida asíncrona: entran varias señales y se generan varias señales en respuesta (no hay una relación uno a uno entre las señales de entrada y salida).

La entrada podría provenir de una entrada de usuario de socket de red / archivo / interactiva (basada en terminal); o desde una función de vista de marco web. De manera similar, es posible que la salida deba enviarse a un socket / archivo / pantalla, o devolverse a la persona que llama (en este último caso, debe almacenarse en búfer y toda la salida acumulada desde la última llamada debe devolverse). La elección entre diferentes canales de E / S se realiza una vez al principio y no se modifica mientras el programa se está ejecutando.

Supongo que la capa de E / S utiliza varios subprocesos o procesos o es asíncrona. Y llama a mis funciones de biblioteca.

¿Cuáles son las ventajas y desventajas de aceptar como argumentos dos objetos de secuencia (para entrada y salida); Exponer funciones que deben llamarse cuando una entrada está disponible o se desea una salida; ¿Usando mensajes para comunicarse? ¿O quizás algún otro enfoque es mejor?

    
pregunta max 17.11.2016 - 09:51

1 respuesta

2

En pocas palabras:

  • mensajes : un paradigma directo y, a menudo, el más fácil de interactuar, especialmente si desea apuntar a una amplia gama de i / o (tcp, http, terminal ...) . En la mayoría de los casos, tiene una capa intermedia independiente para almacenar en caché y manejar flujos de i / o.

  • funciones : bueno, eso es perfecto para las bibliotecas que se usan en el mismo idioma. Pero si desea interactuar con él en un nivel superior, necesitará un envoltorio alrededor de él de todos modos.

  • transmisiones : aceptar las transmisiones directamente en la biblioteca es similar a los mensajes pero tiene un inconveniente. Principalmente, todo lo relacionado con lo que puede salir mal con las transmisiones (desconectado, tiempos de espera, errores ...) tiende a terminar como un manejo de excepciones en su "lógica empresarial" en lugar de una capa separada.

En mi humilde opinión, no lo vería como una pregunta "esto o aquello" . Más bien, podría ser interesante verlo desde esta perspectiva:

  

streams se utilizan para transmitir mensajes que son el resultado de llamadas de función

    
respondido por el dagnelies 23.03.2018 - 16:59

Lea otras preguntas en las etiquetas