Estoy trabajando en una biblioteca diseñada para comunicarse (a través de comunicación serie RS232) con dispositivos externos. Estaba pensando en la estrategia de manejo de errores y las excepciones parecían ser correctas y la forma estándar de la industria de informar errores.Confundido sobre cuándo lanzar una excepción
Así que leí algunas pautas sobre excepciones. One indica con bastante claridad que yo no preocupación sobre impacto en el rendimiento:
No utilice códigos de error debido a la preocupación de que las excepciones podrían afectar negativamente al rendimiento.
Other me dijeron que no lanzar una excepción en casos normales:
No utilizar excepciones para los errores normales o esperados, o para el flujo normal de control.
No puedo trazar una línea clara entre normal/esperado y otros casos. Por ejemplo, en mi biblioteca, una operación puede fallar porque:
- No hay respuesta del dispositivo. (no hay cable conectado, el dispositivo no está encendido, tasa de baudios incorrecta)
- La solicitud de operación es rechazada por el dispositivo porque no pudo autenticar la solicitud.
- Se produjo un error en la comunicación. (Alguien tropezó con el cable, el dispositivo se apagó de repente).
se me ocurre todo lo anterior como era de esperar problemas, ya que pueden ocurrir en la práctica muy a menudo (de hecho muchos tarados de marketing me llaman para resolver el^problema^en mi software sólo para descubrir que aún no ha conecte el cable a su ordenador portátil) Por lo tanto, puede que no se den excepciones, ya que de lo contrario el programador de aplicaciones tendrá que atraparlas en muchos lugares (muchos bloqueos de captura tampoco son agradables).
Por otro lado, también tiendo a pensar que estos son todos los errores que de alguna manera tengo que informar al programador de aplicaciones, y la excepción parece ser la manera de hacerlo. Si no uso excepciones, tendré que informar estos problemas usando algún código de error o enumeraciones de error. (feo, lo sé).
¿Qué enfoque crees que debería tomar?
En cuanto al rendimiento, solo he visto una vez cuando el rendimiento entró en vigencia y hubo literalmente cientos de excepciones lanzadas y atrapadas una detrás de la otra. Tuvimos una operación que se podía hacer de dos maneras, una que a veces funcionaba pero arrojaba una excepción cuando no lo hacía, y la otra forma requería reflexión. Decidimos que la ruta de reflexión debería ser un retroceso si no podemos hacerlo sin reflexión. Resulta que se lanzaron tantas excepciones que era mucho más rápido usar siempre el método de reflexión (la diferencia era que el usuario esperaba 10 segundos frente a fracciones de segundo). – Davy8