Data Architecture
So far, we have focused on how business processes are structured and executed: use cases isolate responsibility, layers separate types of work, and non-functional architecture moves work through the system.
All of these ideas depend on one practical question: what exactly moves through the system?
The answer is data. Not as database rows or UI fields, but as business facts in motion.
In this architecture, data is not a byproduct of execution. It is the medium through which execution happens.
In many systems, data is treated as an implementation detail. Developers create one data shape for the database, another for the service layer, another for the user interface, and then spend much of the project converting between them.
This approach becomes fragile in process-driven systems, because:
If data loses meaning at each boundary, then business logic becomes dependent on how other layers represent data, and the architecture collapses into coupling.
A common anti-pattern in layered systems is a chain of conversions:
At each conversion point, meaning is reinterpreted. Fields are renamed, combined, split, or dropped. Over time, the system no longer has a single, stable representation of business facts.
In business process execution, this is especially dangerous because decisions depend on context. A decision is rarely based on one value. It is based on a set of facts collected over time.
To support business process execution, data must have a small set of properties. These properties are architectural constraints, not implementation preferences.
These requirements ensure that business logic can remain focused on decision-making, rather than on reconstructing meaning from scattered representations.
Non-functional architecture coordinates execution without understanding business meaning. For that coordination to work, the unit of work must be transportable and routable.
This is why the architecture uses a data container: a transportable representation of business facts plus routing metadata.
The data container connects functional architecture and NFA. It allows the system to move work through layers and handlers without coupling business behavior to infrastructure details.
This page described what data must be in a process-driven architecture. The next chapter describes one concrete realization of these principles: the POCO DataSet.
It is introduced not as a replacement for a database, but as a practical way to carry business facts safely through states, transitions, and layers.
Table of Content Software Architecture Previous: Assemblies Architecture