¿Cuán granular debería usted hacer sus Observables / Listenables?
-
05-07-2019 - |
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?
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.