mi humilde opinión - observadores Suck
voy a pasar por una serie de razones por las que creo que hacen. Ten en cuenta que esto también se aplica en general al uso de los métodos before_x o after_x, que son ejemplos más fragmentarios del observador general.
hace que sea difícil escribir pruebas unitarias adecuadas
Por lo general, al escribir pruebas de unidad, que está probando una pieza específica de funcionalidad. Sin embargo, para poner a prueba a un observador, es necesario "activar" el evento para probarlo, y en ocasiones es simplemente inconveniente.
E.g. Si conecta un observador a before_save, entonces para activar el código, debe guardar el modelo. Esto dificulta la prueba, dado que es posible que esté probando lógica comercial, no persistencia. Si simula el guardado, es posible que su desencadenador no funcione. Y si lo dejas guardar, entonces tus pruebas son lentas.
Requiere estado
A raíz del hecho de que los observadores tienden a ser difíciles de probar, los observadores también tienden a requerir una gran cantidad de estado. La razón es porque la lógica en un observador está tratando de distinguir entre varios "eventos de negocios" y la única manera de hacerlo es observar el estado del objeto. Esto requiere una gran cantidad de configuración en sus pruebas, y por lo tanto hace que las pruebas sean difíciles, tediosas y problemáticas.
consecuencias no intencionadas
sin duda, que acaban de experimentar debido a que se puede conectar múltiples observaciones, no tiene idea de lo que podría estar desencadenando diversos comportamientos. Esto conduce a consecuencias no deseadas, una que solo puede detectar a través de la integración/prueba del sistema (retroalimentación lenta). Rastrear a tus observadores tampoco es muy divertido.
problemas supuestos Solicitar
no hay garantía de que un observador puede patear. Sólo se garantiza que se inició. Si tiene un orden implícito como parte de las reglas de su negocio, entonces los observadores están equivocados.
conduce a una mala diseño
Añadiendo cosas mediante la conexión de los observadores conduce a diseños pobres. Tiende a llevarlo a conectar todo para guardar, eliminar y crear eventos, lo cual, aunque conveniente, también es difícil de entender. P.ej. salvar a un usuario podría significar que está actualizando los detalles del usuario, o podría significar que le está agregando un nuevo nombre de cuenta.Saber lo que puede hacer específicamente con un objeto es parte de la razón por la cual tiene métodos y nombres significativos basados en la acción. Si todo es un observador, se pierde y todo está respondiendo a los eventos, y dentro de su lógica de observación, usted tiende a tratar de distinguir el evento, que pertenece a qué evento de negocios.
Hay algunos lugares donde un observador es amable, pero eso suele ser una excepción. Es mucho mejor injertar lo que se puede hacer explícitamente, en lugar de codificar la lógica implícitamente mediante devoluciones de llamada.
Para aquellos en contra de Observadores, considere usar [Usar casos] (http://webuild.envato.com/blog/a-case-for-use-cases/) que es una secuencia de pasos (de lógica de negocios) para ser ejecutado. No es difícil ejecutar su propio caso de uso, pero también hay algunas gemas decentes, p. [solid_use_case] (https://github.com/mindeavor/solid_use_case) o [use_case] (https://github.com/cjohansen/use_case) – Dennis