エンティティ・コンポーネント・システム
オブジェクトは単なる ID、データはコンポーネントに、ロジックはそれらを走査するシステムに置くアーキテクチャ。
このパターンは、ゲーム開発で継承階層が破綻したことから生まれた。FlyingEnemy と SwimmingEnemy がいて、両方をこなす敵が必要になった途端、クラスツリーは手に負えなくなる。ECS はこれを逆転させる。エンティティはただの整数、Position や Health は純粋なデータ、システムは「Position と Velocity を持つ全エンティティ」を要求して一括で更新する。1998〜2002年頃に Thief や Dungeon Siege が広めた。
性能面の利点はメモリレイアウトにある。コンポーネントは連続した配列に並ぶので、1万個の位置を更新するシステムは、散らばったオブジェクトを辿る代わりにキャッシュ上を一気に流れる。データ指向設計と同じ発想である。現代の実装には Unity の DOTS や Rust の Bevy がある。代償は可読性で、「敵とは何か」を説明するクラスはどこにも開けない。