Diseñando Puntuaciones en el Tablero de Líderes en DDD
Hay dos entidades relacionadas con este problema, principalmente:
1. Tabla de líderes: que contiene información sobre el tipo (menor primero/mayor primero), descripción, nombre, etc.
2. Puntuación: el valor de puntuación enviado por el jugador que contiene los detalles del jugador junto con el valor de puntuación.
Casos de uso:
1. Necesitamos buscar a los mejores 10 jugadores.
2. Para una tabla de líderes mensual, necesitamos encontrar a los mejores 3.
Reglas de dominio:
1. Un jugador puede enviar cualquier número de puntuaciones.
2. La clasificación de la tabla de líderes debe basarse en el tipo definido en la tabla de líderes (menor/mayor).
Para un sistema como este en el que:
1. La tabla de líderes y las puntuaciones tienen una relación de 1 a muchos.
2. La puntuación necesita tener información sobre la información del jugador (que es una raíz de agregado separada y en un Contexto delimitado diferente).
¿Cómo diseñarlo en DDD?
Escenario 1:
¿La tabla de líderes será la raíz de agregado y las puntuaciones se agregarán a través de la raíz de agregado de la tabla de líderes (para cada puntuación)?
Consultas:
1. Aquí, las puntuaciones no tienen ningún significado sin la tabla de líderes y tampoco hay reglas de dominio que exijan agregar una puntuación a través de la raíz de agregado de la tabla de líderes. Esto es de hecho un dilema, ¿y cómo manejarlo?
2. ¿Cómo obtener los detalles del jugador para alimentar la puntuación? ¿Necesito buscar los detalles del jugador en un servicio de dominio y alimentar la raíz de agregado de la tabla de líderes al agregar la puntuación?
Escenario 2:
La tabla de líderes y la puntuación de la tabla de líderes son dos raíces de agregado diferentes.
Consultas:
1. Mientras se calculan los rangos, ¿necesitamos buscar puntuaciones del agregado de puntuaciones e información de tipo de la tabla de líderes y cumplir con el caso de uso?
2. Aquí, la mayoría del código que sirve a los casos de uso debe estar en un Servicio de Dominio o Servicio de Aplicación.
davy.ai
Microservicios y Diseño DDD para el Sistema de Clasificación y Puntuación
En un sistema de clasificación y puntuación, existen dos entidades principales: Clasificación (Leaderboard) y Puntuación (Score). La clasificación almacena información sobre su tipo, descripción y nombre, mientras que la entidad de puntuación almacena el valor enviado por el jugador junto con los detalles del jugador.
Casos de Uso
Existen dos casos de uso para este sistema:
Reglas del Dominio
Existen dos reglas del dominio para este sistema:
Consideraciones de Diseño
Al diseñar este sistema, hay algunas consideraciones a tener en cuenta:
Escenario 1: Clasificación como Raíz de Agregado
En este escenario, la clasificación es la raíz de agregado, y las puntuaciones se agregan a través de ella.
Consultas:
Escenario 2: Clasificación y Puntuaciones como Raíces de Agregado Separadas
En este escenario, la clasificación y la puntuación de la clasificación son dos raíces de agregado separadas.
Consultas:
En general, el diseño de un sistema de clasificación y puntuación requiere una cuidadosa consideración de las relaciones entre las entidades y las reglas del dominio involucradas. Tanto la arquitectura de microservicios como el diseño orientado al dominio pueden ser herramientas útiles para crear una solución sólida y escalable.