2010-12-21 29 views
7

He estado estudiando oyentes de eventos últimamente y creo que finalmente los he decepcionado. Básicamente, son funciones que se invocan en el método de otro objeto. Mi pregunta es, ¿por qué crear un detector de eventos cuando se llama a la función funcionará bien?¿Por qué utilizar los detectores de eventos sobre las llamadas a funciones?

Ejemplo, deseo llamar a player.display_health(), y cuando esto se active, el método player.get_health() debe activarse y almacenarse para que display_health() tenga acceso a él. ¿Por qué debería usar un detector de eventos simplemente llamando a la función? Incluso si display_health() estuviera en otro objeto, esto todavía no parece ser un problema para mí.

Si tiene otro ejemplo que se adapte mejor al uso, hágamelo saber. Quizás algunos idiomas en particular no se benefician tanto de él. (Javascript, PHP, ASP?)

Respuesta

8

Es posible que no siempre controle el código que realiza la llamada. O incluso si lo es, no desea introducir dependencias en ese código. En casos como este, es mejor que el código active un evento y permita que el código que controlas, o el código que debería tener la dependencia, escuche el evento y actúe en consecuencia.

Por ejemplo, quizás esté creando una biblioteca que será utilizada por otras personas. No tienen el código fuente o de alguna manera no pueden/no pueden modificarlo (o no deberían). Su documentación establece que los eventos específicos se plantean en circunstancias específicas. Luego pueden, a su vez, responder a esos eventos.

O tal vez tenga algunas bibliotecas de dominio en su empresa. Usted los controla y puede modificarlos, pero desde el punto de vista arquitectónico generalmente se considera que funcionan tal como están codificados actualmente y no deben modificarse. (No desea incurrir en una ronda de control de calidad para volver a validar el código actualizado, el código pertenece a otro departamento y no quiere que lo cambie, etc.) Y está en la posición en que desea que código para poder hacer cosas diferentes en diferentes circunstancias/entornos. Si ese código aumenta y el evento es relevante, puede conectar su código (y/o cambiarlo en consecuencia) sin tener que meterse con ese código.

Solo un par de ejemplos rápidos, estoy seguro de que otros tienen más.

+0

La idea detrás de las bibliotecas de dominio sobre las que tengo control me dio una buena comprensión ya que la mayoría de las cosas con las que trabajo tienen control total. Entonces, dado que tengo control sobre eso, necesito hacer la pregunta opuesta, ¿hay alguna razón para NO usar escuchas de eventos sobre llamadas a funciones? – Organiccat

+0

@ Organiccat: como antes, estoy seguro de que hay otras razones. Pero la razón más importante para mí sería el principio de inversión de dependencia. El código que responde al evento puede tener (o incluso ser) una dependencia que lógicamente no pertenece al código que provoca el evento. – David

+0

Pensé en ello después, pero supongo que la duplicación de código también sería una buena razón para tener una función en lugar de un detector de eventos (especialmente cuando no se está codificando una biblioteca). – Organiccat

4

Mi pregunta es, ¿por qué crear un detector de eventos al llamar la función funcionará bien?

¿Qué sucede si no sabe a qué función desea llamar?

Tome el ejemplo clásico, un botón en el que el usuario puede hacer clic. Quien escriba la biblioteca tiene no idea qué función desea que se llame cuando se hace clic en el botón. También sería bastante prohibitivo si cada botón solo pudiera llamar a la misma función cuando se hace clic.

Por lo tanto, puede adjuntar un controlador de eventos al evento. Luego, cuando se desencadena el evento, el botón puede hacer lo que necesita, sin tener que saber en tiempo de compilación exactamente a qué función se supone que llama.

+0

No veo ninguna explicación aquí. Hay eventos incorporados en los lenguajes (JS por ejemplo) que son útiles, pero no veo ningún motivo para crear eventos yo mismo si lo que estoy creando no es una biblioteca. Puedo usar el evento 'onclick' en el botón y llamar a tantas funciones que quiero ¿cuál es el problema aquí?Estoy aquí porque encontré información sobre los eventos de NodeJS y no puedo entender por qué debería saber sobre ellos. – Telion

1

En pocas palabras, puede escribir el código sin detector de eventos, pero utilizando el detector de eventos ayuda a otros a usar el mismo código que la biblioteca.

+1

¿Podría dar más detalles sobre cómo ayudaría a otros cuando se codifica como una biblioteca? – cavpollo

Cuestiones relacionadas