DFD family: processes, data stores and external entities

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 ClassShapeDescription
DFDProcessCircleStandard process transforming data flows.
DFDProcessCircleCircleSimple circle notation process.
DFDProcessGaneSarsonRounded rectangleGane-Sarson notation process with ID and location.
DFDProcessOvalOvalOval-shaped process variant.
DFDProcessNumberedRounded rectangle + numberNumbered process for decomposition.
DFDProcessMultiIORectangle with multiple portsProcess with multiple input/output ports.
DFDProcessGroupBoundaryDashed rectangleContainer grouping related processes.
DFDDataStoreOpen-ended rectangleStandard data store notation.
DFDDataStoreCylinderCylinderDatabase-style data store.
DFDDataStoreOpenEndedRectangle open rightYourdon-style open-ended store.
DFDDataStoreParallelDouble line rectangleParallel data store notation.
DFDDataStoreSharedRectangle with labelShared data store across systems.
DFDExternalEntityRectangleExternal entity (source/sink of data).
DFDExternalEntityGaneSarsonRectangle with shadowGane-Sarson external entity notation.
DFDNoteRounded noteAnnotation/comment node.
DFDTrustBoundaryDashed enclosureTrust/security boundary marking.
DFDSubsystemContainerRounded rectangle containerContainer for decomposed subsystem.
DFDControlDatabase containerControl and coordination process.

DFDProcess

Standard process transforming data flows.

ShapeCircle
Input Ports2+ (any side)
Output Ports2+ (any side)

DFDProcessCircle

Simple circle notation process.

ShapeCircle
Input Ports2+
Output Ports2+

DFDProcessGaneSarson

Gane-Sarson notation process with ID and location.

ShapeRounded rectangle
Input Ports2+
Output Ports2+

DFDProcessOval

Oval-shaped process variant.

ShapeOval
Input Ports2+
Output Ports2+

DFDProcessNumbered

Numbered process for decomposition.

ShapeRounded rectangle + number
Input Ports2+
Output Ports2+

DFDProcessMultiIO

Process with multiple input/output ports.

ShapeRectangle with multiple ports
Input Ports4+
Output Ports4+

DFDProcessGroupBoundary

Container grouping related processes.

ShapeDashed rectangle
Input Ports0
Output Ports0

DFDDataStore

Standard data store notation.

ShapeOpen-ended rectangle
Input Ports2 (left/right)
Output Ports2 (left/right)

DFDDataStoreCylinder

Database-style data store.

ShapeCylinder
Input Ports2
Output Ports2

DFDDataStoreOpenEnded

Yourdon-style open-ended store.

ShapeRectangle open right
Input Ports2
Output Ports2

DFDDataStoreParallel

Parallel data store notation.

ShapeDouble line rectangle
Input Ports2
Output Ports2

DFDDataStoreShared

Shared data store across systems.

ShapeRectangle with label
Input Ports2
Output Ports2

DFDExternalEntity

External entity (source/sink of data).

ShapeRectangle
Input Ports2
Output Ports2

DFDExternalEntityGaneSarson

Gane-Sarson external entity notation.

ShapeRectangle with shadow
Input Ports2
Output Ports2

DFDNote

Annotation/comment node.

ShapeRounded note
Input Ports0
Output Ports0

DFDTrustBoundary

Trust/security boundary marking.

ShapeDashed enclosure
Input Ports0
Output Ports0

DFDSubsystemContainer

Container for decomposed subsystem.

ShapeRounded rectangle container
Input Ports2+
Output Ports2+

DFDControl

Control and coordination process.

ShapeDatabase container
Input Ports2+
Output Ports2+

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 ClassInput PortsOutput PortsExtra
DFDProcess2+ (any side)2+ (any side)—
DFDProcessCircle2+2+—
DFDProcessGaneSarson2+2+—
DFDProcessOval2+2+—
DFDProcessNumbered2+2+—
DFDProcessMultiIO4+4+—
DFDProcessGroupBoundary00—
DFDDataStore2 (left/right)2 (left/right)—
DFDDataStoreCylinder22—
DFDDataStoreOpenEnded22—
DFDDataStoreParallel22—
DFDDataStoreShared22—
DFDExternalEntity22—
DFDExternalEntityGaneSarson22—
DFDNote00—
DFDTrustBoundary00—
DFDSubsystemContainer2+2+—
DFDControl2+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]);