El diseño orientado a datos (Data-Oriented Design, DOD) es un paradigma de programación que prioriza el acceso y la transformación de la información por encima de la estructura jerárquica de clases propia de la programación orientada a objetos (OOD). Su motivación principal es el rendimiento, derivado del comportamiento de la jerarquía de memoria del computador.
A 3,2 GHz, una lectura a memoria principal ronda los 600 ciclos de reloj, una cifra que se reduce a 40 ciclos a 300 MHz; la diferencia se explica por las cachés L1 y L2, que bajan la latencia a apenas 1-2 ciclos. La presentación ilustra esta brecha con un ejemplo en C++ de una clase Bot: al ejecutar el mismo método updateAim sobre cuatro bots distintos, cada llamada incurre en fallos de caché de instrucciones (icache-miss) y de datos (data-miss), arrastrando datos cacheados que no se utilizan. El resultado son 7.680 ciclos consumidos en accesos a memoria.
En la versión DOD, el método se reescribe como una función que recibe matrices lineales (AimingData) y un puntero de salida, recorriendo los datos de forma contigua. El bucle solo lee las entradas necesarias, escribe en un array lineal y reutiliza el código en caché. Así, el rendimiento mejora notablemente frente al enfoque orientado a objetos.
Además, el diseño orientado a datos facilita el paralelismo: al conocer de antemano qué datos se leen y escriben, se evita depender de bloqueos (locks) y se simplifica la descarga de trabajo a unidades de procesamiento auxiliares como SPU, GPU o APU. Como efecto colateral, la separación entre datos y código produce piezas intercambiables, aisladas y fácilmente testeables.
