Pregunta

Tienes un observable / escuchable orientado a la extracción que notifica a los observadores / oyentes cuando cambia algún estado.

El estado consta de más de un nugget de datos, y algunos de sus observadores / oyentes no se preocupan por todo el estado.

¿Por lo general, prefiere notificar a todos los observadores / oyentes de todos modos y les permite ignorar las notificaciones cuando no les importa nada que les importe?

O, por lo general, prefiere un Observable separado para cada " nugget " de datos para que sus observadores / oyentes tengan la garantía de recibir solo las notificaciones a las que deben responder?

¿Depende de la situación?

¿Tiene alguna idea general sobre la granularidad de sus Observables / Listenables?

¿Fue útil?

Solución

Está cambiando los costos de mantenimiento por los costos de entrega. Si tiene definiciones de Evento detalladas, cada observador obtiene exactamente lo que necesita, por lo que no paga los gastos generales de envío a los observadores que no están interesados, sino que ahorra costos porque cada nuevo tipo de pepita debe agregarse a la sistema de alguna manera.

En los sistemas de mensajería de Pub / Sub, donde los costos de entrega son relativamente altos (los mensajes que fluyen a través de las redes), por lo general, es necesario prestar mucha atención a las definiciones de los temas. Una jerarquía de temas cuidadosamente diseñada es a menudo útil. Así obtenemos patrones como

  sport
       football
              england 
                    premier
                    champioship
              scotland
                    spl
              france
                    ...
       cricket
              australia
                    ...
              india
              sri lanka

Por lo tanto, permitir las suscripciones en varios niveles. Puedes suscribirte a todos los deportes o (como algunas personas pueden) hasta

    sport/football/england/championship/watford

Otros consejos

Bueno, como regla general, las interfaces especializadas hacen más bien que daño, por lo que definitivamente implementaría más en lugar de menos.

Esto obviamente llama a la situación sin embargo. Solo se especializa de esta manera si es necesario, y desde su situación parece ser así, de lo contrario es como informar a los fabricantes del Cereal que el trigo necesita ser cosechado. Simplemente no se aplica.

Si tuviera que hacer esto, probablemente crearía una clase Observable que tendría un evento para cada tipo de nugget, y un evento global para cualquier nugget. Un poco como un camino medio.

No es solo mantenimiento. Cuanto más específica es la interfaz entre observables y observadores, más acoplados se vuelven.

El libro Gang Of Four tiene una sección para este mismo problema, y ??desaconsejan los modelos push y pull. El modelo de extracción puede ser ineficiente, el modelo de inserción puede no ser lo suficientemente reutilizable.

Entonces, depende mucho de la situación. Tiendo a ir ligeramente por encima del modelo de tracción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top