Duda, ¿cómo diseñar servicios distribuidos?

Tengo una duda gorda a la hora de diseñar servicios consumibles por la UI.
Imagina que te quieres abstraer todo lo posible en una vista. Esa vista consume un servicio conectado‏ que puede fallar‏ por mil causas diferentes. El más común: la conexión se ha petado.
Ante determinadas causas, la vista podría intentar solucionarlo‏, por ejemplo, avisando al usuario y tratando de reconectar‏. Pero entonces echamos por tierra la abstracción! ¿En cada invocación de un método, habrá un try-catch‏‏ “por si las moscas”?
¿Cómo proceder?
Gracias a Juan María Hernández (@gulnor) ahora puedo decir que tengo la respuesta. Juanma escribe en su blog el artículo  “Si no puedes abstraerlo, hazlo explícito” (muy recomendable leerlo).
En resumen, con sus propias palabras:
No trates de abstraer la llamada a un servicio externo porque el cliente debe ser consciente de lo que está haciendo. Llamar a un servicio externo tiene implicaciones a la hora de controlar errores (como comentas en tu post), pero también a la hora de interactuar con el servicio porque hay que tener en cuenta la diferencia de rendimiento con respecto a una llamada local. Si tienes que trabajar con un servicio externo, es mejor que eso sea explícito para que el cliente pueda decidir cómo lidiar con esas circunstancias.
Muchas gracias por tu respuesta y por compartir tu amplio conocimiento🙂

2 pensamientos en “Duda, ¿cómo diseñar servicios distribuidos?

  1. Pingback: Si no lo puedes abstraer, hazlo explícito

  2. Aunque ya lo hablamos por twitter, me parecía un tema lo bastante interesante como para escribir un post que a lo mejor les interesa a tus lectores: http://blog.koalite.com/2013/11/si-no-lo-puedes-abstraer-hazlo-explicito/

    Para los que no tengas ganas de leer mucho, el resumen es:

    No trates de abstraer la llamada a un servicio externo porque el cliente debe ser consciente de lo que está haciendo. Llamar a un servicio externo tiene implicaciones a la hora de controlar errores (como comentas en tu post), pero también a la hora de interactuar con el servicio porque hay que tener en cuenta la diferencia de rendimiento con respecto a una llamada local. Si tienes que trabajar con un servicio externo, es mejor que eso sea explícito para que el cliente pueda decidir cómo lidiar con esas circunstancias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s