Terminar de pulir técnicamente TiempoReal
Closed this issue · 2 comments
Aunque la versión v3.0.0 del plugin es bastante estable, bien diseñada y completa de funcionalidades, todavía hay un margen de mejora pequeño a nivel de diseño de código y algoritmos. Estas mejoras tendrían un impacto positivo, aunque pequeño, sobre la escalabilidad del plugin (es decir, que su rendimiento siga siendo aceptable aún bajo la carga de más jugadores conectados) y la mantenibilidad de su código. En concreto, estos son los puntos que se me ocurre mejorar, ordenados de mayor a menor importancia:
-
Refactorizar clases relacionadas con la configuración para que formen una librería. Dicha librería debe de ser un plugin de Bukkit también, pues usa métodos de su API. Me parece que LibConfig sería un nombre adecuado.
-
Si el número de configuraciones es algo grande (hacer tests para obtener número exacto), optimizar set y get de la clase Configuracion para que utilicen el puntero referenciado en un Map<Class,ParametroConfiguracion> en vez de recorrer linealmente todos los parámetros posibles y quedarse con el que es del tipo deseado. Esto aumentaría el rendimiento en todos los accesos excepto el primero, e implicaría vaciar el mapa al recargar la configuración (los punteros dejarían de ser válidos), a cambio de un consumo de memoria ligeramente mayor.
-
Corregir Javadoc constructor ParametroConfiguracionNotificado y setValor (método final, ya no se sobreescribe).
-
Tener en cuenta que los jugadores pueden dejar de tener un reloj en la mano si son destinatarios de un /clear. Actualmente el plugin no lo tiene en cuenta, y sigue mostrando la hora hasta que el jugador interactúa de alguna manera con su inventario.
Implementado lo anterior, que no solo mejoraría TiempoReal, sino que también facilitaría el desarrollo de otros plugins pendientes, se podría hacer:
-
Guardar instancia del plugin TiempoReal en atributo público estático, para no tener que pasarlo a constructores y eliminar duplicación de información. Un import static de la clase principal permite no sacrificar legibilidad.
-
Corregir Javadoc JUGADORES_RELOJ.
-
Usar LinkedHashSet para guardar JUGADORES_RELOJ en TiempoReal. Esto reduce la complejidad de la operación de recorrerlo linealmente, manteniendo la complejidad del resto de operaciones, a cambio quizá de un mayor consumo de memoria.
Esta incidencia puede estar sujeta a cambios, dependiendo de las ideas que se puedan ir ocurriendo o descartando.
Añadida propuesta de mejora: manejar el caso de que un jugador que empuñe un reloj sea destinatario de un /clear que le quite tal reloj.