El enfoque de "agregación pura" descrito por West en ese artículo vinculado evita por completo un objeto de "entidad". Hay componentes, que flotan en la memoria, pero están unidos solo por relaciones implícitas, si es que existen.
Una forma de hacerlo es el llamado enfoque externo . En un sistema de este tipo, los componentes están en manos de sistemas que los administran o los controlan (uso el término "administrar" aquí, pero no debe tomar esto como que estoy sugiriendo que tiene un montón de * clases de Gerentes para mantener tipos de componentes). Por ejemplo, su sistema de física puede aferrarse a un montón de cosas que representan cada cuerpo rígido en su mundo de simulación, y puede exponer esas cosas como componentes de física. Los componentes pueden ser los objetos reales manejados por el subsistema en cuestión, o pueden ser proxies para esos objetos, según sea necesario.
En dicho sistema, no es necesariamente necesario que una clase "Entidad" contenga una colección de referencias a los componentes que la componen; en su lugar, se genera una notificación sobre la creación o destrucción de una "entidad" y cada subsistema que maneja componentes examina la descripción de la entidad creada / destruida (que generalmente se carga a partir de algunos datos) y determina si un componente es necesario para ello.
Una de las ventajas de este enfoque es que obtienes una muy buena localidad de referencia para cada componente. Desafortunadamente, es un poco extraño, en general, y no es el sabor más amigable de las entidades basadas en componentes que he encontrado. A veces es realmente conveniente tener un objeto real que represente una entidad, incluso si ese objeto hace poco más que agregar referencias débiles a componentes que todavía están en otros subsistemas (si nada más, proporciona una manera fácil de enrutar mensajes entre componentes) .
Hay varias buenas maneras de implementar sistemas de objetos de juego orientados a componentes; realmente, realmente, realmente ayuda si tiene una idea sólida de los requisitos que desea de su sistema; puede ver lo que hacen los marcos populares como Unity como ejemplos. Sin establecer requisitos estrictos para usted, puede encontrarse con el problema de "diseñar" sin cesar el sistema sin construirlo realmente, intentando en vano lograr la implementación perfecta. Por alguna razón, he visto esto mucho con los sistemas de componentes.