Sobre clases y estructuras, de nuevo

“When should I use struct and when class?”

Sabios consejos los de Reed Copsey 🙂

 

http://social.msdn.microsoft.com/Forums/es-ES/35f65e7e-6427-4c0c-950c-bdad0a820cf0/when-should-i-use-struct-and-when-class?forum=csharpgeneral

Anuncios

Concern: How to design a distributed service?

I have a major concern nowadays when trying to design distributed services that are consumed by the UI.
Imagine that you want to abstract as much as you can thinking of a View. This View consumes a distributed service that can fail to work under a lots of different situations. The most common failure: The connection cannot be established / is lost.
The view can be aware of those problems and try to recover from a failure, for example, warning the user and attempting to reconnect. But, then we totally break the abstraction! we start to think of it as a connected service.
What can we do? Should we put every method call in a try-catch block and a add reconnection loop?
It seems very ugly to me.
How to proceed?

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 🙂