そのリンクされた記事でWestによって説明された「純粋な集約」アプローチは、「エンティティ」オブジェクトを完全に避けます。メモリ内に浮かんでいるコンポーネントがありますが、それらは暗黙の関係によってのみ結合されます。
これを行う1つの方法は、いわゆるアウトボードアプローチです。このようなシステムでは、コンポーネントはそれらを管理または制御するシステムによって保持されます(ここでは「管理」という用語を使用しますが、これは、保持する* Managerクラスの束があることを示唆しているという意味ではありません。コンポーネントタイプ)。たとえば、物理システムは、シミュレーションの世界で各剛体を表す多くのものを保持し、それらをPhysicsComponentsとして公開する場合があります。コンポーネントは、問題のサブシステムによって処理される実際のオブジェクトにすることも、必要に応じてそれらのオブジェクトのプロキシにすることもできます。
そのようなシステムでは、それを構成するコンポーネントへの参照のコレクションを保持する「エンティティ」クラスは必ずしも必要ではありません。代わりに、「エンティティ」の作成または破棄に関する通知が発生し、コンポーネントを処理する各サブシステムが、作成または破棄されたエンティティ(通常、一部のデータから読み込まれる)の説明を見て、コンポーネントがそのエンティティに必要かどうかを判断します。
このアプローチの利点の1つは、各コンポーネントの参照の局所性が非常に優れていることです。残念ながら、これは全体的に少し奇妙で、私が遭遇したコンポーネントベースのエンティティの中で最もフレンドリーな味ではありません。エンティティを表す実際のオブジェクトが他のサブシステムによってまだ保持されているコンポーネントへの弱い参照を集約するだけであっても、それが本当に便利な場合があります(他に何もない場合、コンポーネント間でメッセージをルーティングする簡単な方法を提供します) 。
コンポーネント指向のゲームオブジェクトシステムを実装するには、いくつかの良い方法があります。システムに必要な要件をしっかりと理解していれば、本当に役立ちます。Unityのような一般的なフレームワークが例として何をしているのかを見ることができます。厳密な要件を自分で設定しないと、実際にシステムを構築せずにシステムを際限なく「設計」し、完璧な実装にたどり着くという問題に遭遇する可能性があります。何らかの理由で、コンポーネントシステムでこれをよく見ました。