DFD (Data Flow Diagram) Family
Data Flow Diagrams with 19 node types including Gane-Sarson and Yourdon notation processes, data stores, external entities, and trust boundaries.

Overview
Base Control: DFDControl : MaterialControl
Namespace: Beep.Skia.DFD
The DFDControl is the root control for this diagram family. It inherits MaterialControl and provides shared port management, styling, and template methods for all nodes in the family.
This family contains 18 node types.
Node Types
| Node Class | Shape | Description |
|---|---|---|
DFDProcess | Circle | Standard process transforming data flows. |
DFDProcessCircle | Circle | Simple circle notation process. |
DFDProcessGaneSarson | Rounded rectangle | Gane-Sarson notation process with ID and location. |
DFDProcessOval | Oval | Oval-shaped process variant. |
DFDProcessNumbered | Rounded rectangle + number | Numbered process for decomposition. |
DFDProcessMultiIO | Rectangle with multiple ports | Process with multiple input/output ports. |
DFDProcessGroupBoundary | Dashed rectangle | Container grouping related processes. |
DFDDataStore | Open-ended rectangle | Standard data store notation. |
DFDDataStoreCylinder | Cylinder | Database-style data store. |
DFDDataStoreOpenEnded | Rectangle open right | Yourdon-style open-ended store. |
DFDDataStoreParallel | Double line rectangle | Parallel data store notation. |
DFDDataStoreShared | Rectangle with label | Shared data store across systems. |
DFDExternalEntity | Rectangle | External entity (source/sink of data). |
DFDExternalEntityGaneSarson | Rectangle with shadow | Gane-Sarson external entity notation. |
DFDNote | Rounded note | Annotation/comment node. |
DFDTrustBoundary | Dashed enclosure | Trust/security boundary marking. |
DFDSubsystemContainer | Rounded rectangle container | Container for decomposed subsystem. |
DFDControl | Database container | Control and coordination process. |
DFDProcess
Standard process transforming data flows.
| Shape | Circle |
|---|---|
| Input Ports | 2+ (any side) |
| Output Ports | 2+ (any side) |
DFDProcessCircle
Simple circle notation process.
| Shape | Circle |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
DFDProcessGaneSarson
Gane-Sarson notation process with ID and location.
| Shape | Rounded rectangle |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
DFDProcessOval
Oval-shaped process variant.
| Shape | Oval |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
DFDProcessNumbered
Numbered process for decomposition.
| Shape | Rounded rectangle + number |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
DFDProcessMultiIO
Process with multiple input/output ports.
| Shape | Rectangle with multiple ports |
|---|---|
| Input Ports | 4+ |
| Output Ports | 4+ |
DFDProcessGroupBoundary
Container grouping related processes.
| Shape | Dashed rectangle |
|---|---|
| Input Ports | 0 |
| Output Ports | 0 |
DFDDataStore
Standard data store notation.
| Shape | Open-ended rectangle |
|---|---|
| Input Ports | 2 (left/right) |
| Output Ports | 2 (left/right) |
DFDDataStoreCylinder
Database-style data store.
| Shape | Cylinder |
|---|---|
| Input Ports | 2 |
| Output Ports | 2 |
DFDDataStoreOpenEnded
Yourdon-style open-ended store.
| Shape | Rectangle open right |
|---|---|
| Input Ports | 2 |
| Output Ports | 2 |
DFDDataStoreParallel
Parallel data store notation.
| Shape | Double line rectangle |
|---|---|
| Input Ports | 2 |
| Output Ports | 2 |
DFDExternalEntity
External entity (source/sink of data).
| Shape | Rectangle |
|---|---|
| Input Ports | 2 |
| Output Ports | 2 |
DFDExternalEntityGaneSarson
Gane-Sarson external entity notation.
| Shape | Rectangle with shadow |
|---|---|
| Input Ports | 2 |
| Output Ports | 2 |
DFDNote
Annotation/comment node.
| Shape | Rounded note |
|---|---|
| Input Ports | 0 |
| Output Ports | 0 |
DFDTrustBoundary
Trust/security boundary marking.
| Shape | Dashed enclosure |
|---|---|
| Input Ports | 0 |
| Output Ports | 0 |
DFDSubsystemContainer
Container for decomposed subsystem.
| Shape | Rounded rectangle container |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
DFDControl
Control and coordination process.
| Shape | Database container |
|---|---|
| Input Ports | 2+ |
| Output Ports | 2+ |
Connection Points
Every node in this family exposes connection points (ports) for linking to other nodes. Port positions are computed lazily by LayoutPorts(), which runs when MarkPortsDirty() flags the layout as stale after a move or resize.
| Node Class | Input Ports | Output Ports | Extra |
|---|---|---|---|
DFDProcess | 2+ (any side) | 2+ (any side) | — |
DFDProcessCircle | 2+ | 2+ | — |
DFDProcessGaneSarson | 2+ | 2+ | — |
DFDProcessOval | 2+ | 2+ | — |
DFDProcessNumbered | 2+ | 2+ | — |
DFDProcessMultiIO | 4+ | 4+ | — |
DFDProcessGroupBoundary | 0 | 0 | — |
DFDDataStore | 2 (left/right) | 2 (left/right) | — |
DFDDataStoreCylinder | 2 | 2 | — |
DFDDataStoreOpenEnded | 2 | 2 | — |
DFDDataStoreParallel | 2 | 2 | — |
DFDDataStoreShared | 2 | 2 | — |
DFDExternalEntity | 2 | 2 | — |
DFDExternalEntityGaneSarson | 2 | 2 | — |
DFDNote | 0 | 0 | — |
DFDTrustBoundary | 0 | 0 | — |
DFDSubsystemContainer | 2+ | 2+ | — |
DFDControl | 2+ | 2+ | — |
Connection Conventions
When building diagrams with this family, follow these conventions:
- Processes use consistent naming: 'Verb + Object'
- Data flows are labeled with the data being transferred
- External entities represent systems outside scope
- Data stores use DB cylinder or open-ended rectangle shapes
Usage Example
Complete example showing creation, node placement, and connection:
C# Example
var dfd = new DFDControl
{
X = 100, Y = 50,
Width = 600, Height = 400
};
drawingManager.AddComponent(dfd);
var proc = new DFDProcess { X = 300, Y = 150, Text = "Process Order" };
var store = new DFDDataStore { X = 450, Y = 80, Text = "Orders DB" };
var ext = new DFDExternalEntity { X = 150, Y = 80, Text = "Customer" };
drawingManager.AddComponent(proc);
drawingManager.AddComponent(store);
drawingManager.AddComponent(ext);
drawingManager.ConnectComponents(ext.OutPoints[0], proc.InPoints[0]);
drawingManager.ConnectComponents(proc.OutPoints[0], store.InPoints[0]);