Data-Oriented Design (DOD) es una filosofía de diseño de software que se centra en la estructura y el flujo de los datos, en lugar de en la jerarquía de objetos o el comportamiento. Su objetivo principal es optimizar el rendimiento aprovechando al máximo la localidad de caché y el paralelismo a nivel de datos (SIMD). En DOD, los datos se agrupan por tipo y se almacenan de forma contigua en memoria (Array of Structs vs. Struct of Arrays), minimizando los "cache misses" y permitiendo que la CPU procese grandes bloques de información de manera eficiente. Se busca desacoplar los datos de la lógica de procesamiento, tratando a los datos como la entidad principal y a las operaciones como funciones que actúan sobre ellos.
Este paradigma es fundamental en el desarrollo de videojuegos de alto rendimiento, donde motores como Unity (con su Data-Oriented Technology Stack - DOTS y el Entity Component System - ECS) y Unreal Engine lo emplean para gestionar miles de entidades dinámicas con eficiencia. También se utiliza en simulaciones científicas, procesamiento de señales, análisis de datos a gran escala y sistemas embebidos, donde la latencia y el throughput son críticos. Herramientas y librerías que facilitan DOD incluyen sistemas ECS genéricos y lenguajes como C++ y Rust, que ofrecen control de bajo nivel sobre la disposición de la memoria.
Para un arquitecto, Data-Oriented Design es crucial porque ofrece una vía directa para escalar el rendimiento en sistemas con cargas de trabajo intensivas en datos. Permite diseñar arquitecturas que son inherentemente más eficientes en el uso de la memoria y la CPU, reduciendo la necesidad de hardware más potente o soluciones de escalado horizontal prematuras. Sin embargo, implica un cambio significativo en la mentalidad de diseño, alejándose de los patrones orientados a objetos tradicionales. Los trade-offs incluyen una mayor complejidad inicial en la organización de los datos y una curva de aprendizaje para los desarrolladores, pero los beneficios en rendimiento, especialmente en entornos con restricciones de recursos o requisitos de baja latencia, pueden ser sustanciales y estratégicamente ventajosos para la longevidad y escalabilidad del sistema.