2009-09-20 30 views
6

Me preguntaba cuál es el estándar exceptuado para el manejo de errores en el Modelo.Manejo de errores en el modelo (MVC)

Actualmente tengo los métodos 'setError' y 'getError' que utilizan todos mis Modelos.

Esto significa que solo me preocupa si una llamada a un método en mi Modelo es verdadera o falsa. Si es falso, entonces usaría $this->model->getError() en mi Controlador.

Además, estoy considerando la posibilidad de configurar un archivo separado que contenga todos mis errores. Un archivo por modelo, también quería tener pensamientos sobre esto.

Respuesta

3

Una solución más simple sería usar exceptions.

Cuando se produce un error que sería algo que le muestra a un usuario, ejecute un tipo especial de excepción, quizás llamado UserError. La excepción debe contener el texto del mensaje de error cuando lo arroje. Este tipo de errores son características que proporcionan a los usuarios información útil (es decir, que intentaron borrar algo que no existía - lo que puede suceder cuando tienen varios navegadores abiertos, etc.)

por ejemplo:

throw new UserError("That object no longer exists."); 

Cuando se produce un error que desea ocultar al usuario, arroje un tipo diferente de excepción, quizás llamado InternalError. Desea registrar y permitir que el programa continúe, por lo que el error específico está oculto para el usuario. Si evita que algo suceda, es posible que desee arrojar un mensaje de error genérico. Estos serían errores y desea repararlos lo antes posible.

ej .:

throw new InternalError("Failed to connect to remote service"); 

Todos los mensajes de error se pueden almacenar (codificadas duro) en la fuente de donde se produce la excepción. Esto no es necesariamente una mala práctica de diseño: si utiliza una herramienta como gettext, puede traducir fácilmente todos estos mensajes.

+0

Me gusta esa idea, la única advertencia es que si hay múltiples errores, idealmente quiero registrar el error y continuar la ejecución. De ahí por qué estaba usando setError y getError. Verifico si la declaración es verdadera, lo que significa que todas las acciones fueron exitosas y si no recibo el error. Una acción puede ser parcialmente exitosa, y como resultado me gustaría devolver el mensaje falso y usar getError para obtener un mensaje que indique qué parte no fue exitosa. Espero que tenga sentido. – Andre

1

He estado usando log4j y log4cxx y el registro en syslogd. Kiwi es un simple registrador de Syslogger Win32 que rastreará tus mensajes de registro y los guardará en un archivo. Log4j/Log4cxx tiene archivos de configuración que puede usar para configurar todos sus niveles de registro o destinos de mensajes de registro (puede iniciar sesión en varios lugares).

Requiere muy poco esfuerzo de configuración y uso, y funciona como un amuleto.

No he probado log4php mismo.

Las excepciones son buenas cuando ya no desea que su programa continúe ejecutándose. Captura excepciones en un nivel alto donde puedes aceptar la caída de ejecuciones fallidas.

Cuestiones relacionadas