2012-02-29 7 views
5

¿Crees que es una buena idea?Actualizando la base de datos en __destruct()?

Digamos que tiene un componente de aplicación que otros componentes utilizan para recuperar/actualizar datos en el archivo db. Básicamente es una clase con los métodos get(), set(), update().

¿Sería una buena idea para ese componente actualizar (o configurar) los datos solo en sus propiedades cuando se le llama, y ​​en __destruct para actualizar el db también? ¿O debería actualizar directamente el db en cada conjunto/llamada de actualización?

Respuesta

5

La actualización de la base de datos sobre destrucción de objetos me huele un poco como un software side effect. Es decir, una acción que tiene lugar en un lugar inesperado y algo no explícito. No sería obvio al ver su código que se está produciendo una acción de base de datos cuando se llama al __destruct(), incluso si lo llama explícitamente. Los mantenedores de código futuros (incluyéndote a ti) podrían confundirse fácilmente cuando intentes buscar un error que involucre datos incoherentes, pero sin ver ninguna llamada a la base de datos o llamadas a métodos similares a las interacciones de datos cuando se visualiza el código.

Recomendaría.

2

Al intentar lanzar una excepción desde un destructor (llamado en el tiempo de la terminación del script) se produce un error grave.

¿Y qué pasa si tiene una excepción? De todos modos, creo que esta no es una buena idea, no puedes controlar el flujo de trabajo y es fácil liderar un infierno de depuración.

Cuestiones relacionadas