Data-Oriented Design (DOD)

Data-Oriented Design pune accent pe organizarea datelor in functie de cum sunt accesate, nu pe abstractizare. E o reactie la OOP-ul traditional si la impactul Memory Wall asupra performantei.

Ce este DOD?

Data-Oriented Design e un paradigma de programare popularizat de Mike Acton (Insomniac Games) care spune:

If you don't understand the data, you don't understand the problem.

In loc sa organizezi codul in jurul obiectelor (ca in OOP), organizezi datele in jurul modului in care sunt accesate.

Principiile DOD

  1. Structurile de date determina algoritmii — nu invers
  2. Organizezi datele dupa acces, nu dupa logica — datele folosite impreuna stau impreuna
  3. Minimizezi cache miss-urile — Memory Wall e inamicul numarul 1
  4. Separi datele de comportament — spre deosebire de OOP

Exemplu: Sistem de particule

Abordarea OOP:

class Particle {
    float x, y, vx, vy, life;
};
vector<Particle> particles;
// Iterezi: sari printre campuri, uzura cache

Abordarea DOD:

struct Particles {
    vector<float> x, y;    // pozitiile impreuna
    vector<float> vx, vy;  // vitezele impreuna
    vector<float> life;    // viata separat
};
// Cand actualizezi doar pozitia, accesezi doar x si y
// Totul e secvential in memorie → cache friendly

AOS vs SOA

Aceasta diferenta e cunoscuta si ca:

  • AOS (Array of Structures) — stil OOP: un array de obiecte
  • SOA (Structure of Arrays) — stil DOD: un struct cu array-uri pentru fiecare camp
// AOS — Stil clasic OOP
struct Particle { float x, y, vx, vy, life; };
Particle particles[1000];
// Acces: particles[i].x, particles[i].y — sarituri in memorie

// SOA — Stil DOD
struct Particles {
    float x[1000], y[1000], vx[1000], vy[1000], life[1000];
};
// Acces: x[i], y[i] — secvential, cache-friendly

Cand folosesti DOD?

| Potrivit pentru | Mai putin potrivit | |---|---| | Sisteme performanta-critice (jocuri, simulari) | Aplicatii CRUD simple | | Procesare in timp real | Prototipuri rapide | | Procesare pe batch-uri mari | Cod cu logica de business complexa | | Embedded / console | Aplicatii unde mentenanta e mai importanta |