Pregunta

Para mantener las cosas simplificadas Digamos que tengo una interfaz RandomProvider interfaz

public interface RandomProvider
{
    double nextRandom();
}

Y decir que tengo 3 diferentes implementaciones de esta interfaz, arandom, Brandom, Crandom. Quiero recoger algunas estadísticas sobre las implementaciones:

  • ¿cuántas veces se llama nextRandom()
  • suma de los números aleatorios generados (que puede sonar tonto, pero esto es sólo un ejemplo).

Al final de estas estadísticas se registrarán a DB. Estas son las clases de gran uso de múltiples hilos por lo que no es posible escribir los valores cada vez que llega una petición.

La primera idea que viene a la mente es, hago un producto único que contiene estos datos, las implementaciones llaman el singleton y aumentan las estadísticas necesarias. Otra clase lee del Singleton y escribe los resultados en DB y disminuye las estadísticas. Pero he leído tantos artículos sobre cómo los malos datos de manera global mutables y únicos son tan tengo miedo de ir por este camino.

¿Alguna otra idea?

¿Fue útil?

Solución

Si el singleton puede ser una idea mal, sin embargo, depende de su uso. Si utiliza un producto único sólo para hacer su trabajo de código (lo que le permite tocar otras clases como un objeto central mundial), entonces es malo.

Sin embargo, en última instancia, usted simplemente está buscando una manera de registrar la información (un registrador) y en este caso no es una mala decisión de utilizar un producto único a registrar estos datos o incluso para iniciar la sesión a un texto / archivos de registro.

Otros consejos

Puede utilizar AOP para registrar todas las llamadas de ese método en particular. Compruebe AspectJ . Básicamente se va a interceptar todas las llamadas utilizando un consejo y recoger estadísticas y realizar sus operaciones personalizadas (sumando el número al azar en este caso). A continuación, almacenar esto en una base de datos.

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