Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/06/2013, 08:14
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Cual es la ventaja de las excepciones?

Como te digo las excepciones suben como burbujas, no siempre vas a a poder testear directamente, imaginate que tienes una clase "VentaDeAutos" esta a su vez usa muchas dependencias, y muy dentro tiene una que usa una clase BD para conectarse.

El estar devolviendo un booleano de error hace el código bastante feo, imagínate algo así:
Código PHP:
Ver original
  1. class VentaDeAutos
  2. {
  3.     public function listaAutosEnVenta()
  4.     {
  5.         $buscador = new Buscador();
  6.         $buscador->listaAutos($tipo = 'venta');
  7.     }
  8. }
  9.  
  10. class Buscador
  11. {
  12.     public function listaAutos($tipo)
  13.     {
  14.         $db = new BD();
  15.         $db->conectar();
  16.         $db->query($algo);
  17.     }
  18. }
  19.  
  20. class BD
  21. {
  22.     public function conectar()
  23.     {
  24.         if (!$algo) {
  25.             throw new \RuntimeException('No se pudo conectar a la base de datos');
  26.         }
  27.     }
  28. }
  29.  
  30. try {
  31.     $autos = new VentaDeAutos();
  32.     $autos->listaAutosEnVenta();
  33. } catch (\RuntimeException $e)
  34. {
  35.     logger($e);
  36.     imprime_mensaje_error($e->getMessage());
  37. }

Si fura más limpio como propones, tendrías que estar comparando el tipo devuelto por cada método para ver si es un booleano e irlo "subiendo" por las clases hasta poder mostrar el mensaje de error.

El tener excepciones hace más limpio el diseño, a demás de que ayuda mucho al polimorfismo de cada clase, porque si muestras el error con diseño html, etc dentro de la clase BD estas rompiendo con el polimorfismo de la clase BD ya que su responsabilidad no es esa, es solamente interactuar con la base de datos. Además te ayuda mucho a desacoplar tus clases y a re-utilizar tus diseños en diferentes proyectos, eso es el núcleo de un diseño solido.

Saludos.

Última edición por GatorV; 19/06/2013 a las 08:22