1 Data Oriented Programming
Data-oriented programming centers the design of software on the meaning and representation of data itself. By modeling “data as data” (values independent of behaviors), code becomes simpler, smaller, and clearer because semantics are expressed directly in types and structures rather than hidden behind incidental object state. Objects are not discarded; they’re repositioned as tools for boundaries, orchestration, and resource management, while data representation carries the domain meaning. The core move is to make the code describe itself so that illegal states become unrepresentable and the need for defensive logic diminishes.
The chapter illustrates this with two concrete progressions. First, replacing a vague String id with a UUID aligns the representation with intent, eliminating countless invalid states and the validation code they require. Second, a ScheduledTask example exposes how implicit state (e.g., scheduledAt, attempts) forces readers to infer semantics. Refactoring those states into explicit data types (such as RetryImmediately, ReattemptLater, Abandon under a RetryDecision) bakes domain meaning into the model, enabling semantic integrity, easier reasoning, and clearer usage everywhere (e.g., task.isAbandoned or checks against Abandon) while still integrating cleanly with object-oriented interfaces.
As models become explicit, program structure naturally orients around data: methods take and return domain-specific data (e.g., reschedule(FailedTask) -> RetryDecision), logic becomes expression-driven, and objects act like pipelines that vend and transform data. This style enhances readability and stability by making intent visible at the type and signature level. While the book leverages modern Java features (records, pattern matching, sealed types in Java 21), the principles apply back to Java 8 with conventions and libraries. The teaching approach uses small, realistic examples—often exploring the “wrong” path—to build intuition. The simple practice is: clarify what the data is, express that meaning directly in code, and let the benefits ripple outward through the system.
Objects and how they communicate is our focus during object-oriented design
The representation of our data is the primary focus during data oriented design
Being explicit about what a task can transition to after failing
Representing each decision as a piece of standalone data
Focusing on just the data makes us question our representation
clarifying what we’re talking about
Analyzing the data drives a deeper exploration of the domain
How data-oriented programs tend to be shaped
Summary
- Data Oriented programming is about programming with data "as data"
- Data is more than just a collection of values. It has an inherent meaning.
- Modeling “data as data” lets us focus on capturing that meaning in isolation from other concerns
- Before asking “what does it do?” data orientation starts a more bedrock question of “what is it?” We want to understand what these things in our domain are at a fundamental level
- Data Orientation is not a replacement for object orientation, functional programming, or any other paradigm. We view all of them as useful tools.
- The representations we choose for our data affects our programs as a whole.
- Good representations eliminate the potential for bugs by making it impossible to create invalid data
- Bad representations introduce problems which ripple outward through our codebase and force us to spend effort working around them
- We can replace reasoning about what vague variable assignments mean by representing that meaning with a concrete data type
- Focusing on the data inside of our objects, rather than just the interfaces, makes our objects as a whole more understandable
- When we do a good job of modeling the data, the rest of the code will feel like it’s writing itself. We just have to follow where the data leads
- Data-Oriented programs tend to be built around functions that take data as input and return new data as output
- We’ll use Java 21 throughout the book (though, you can still follow along with Java 8)
Data-Oriented Programming in Java ebook for free