1.2 Principles
Dezyne aims to support known software engineering principles:
- clarity and ease of discovery
- visual overview of architecture (layers of decomposition)
- visual overiew of behaviour (event trace scenarios)
- rigor and formality
- Dezyne allows enforcing completeness and correctness
- implementations consistent with specifications
- specification consistency
- separation of concerns (divide and conquer, low coupling – high
cohesion)
- data is separated from control
- components allow for functional decomposition
- interfaces specify the conversations between each peer in a point to
point relation
- composition is separated from behaviour
- modularity (low coupling, high cohesion; dependency inversion)
- at the file level, Dezyne allows separating type, interface,
component and system definitions
- a component only depends on its interfaces
- a system only depends on it components
- a system is a component
- abstraction (Liskov substitution)
- data independence
- an event represents the transition from one (system) state to
another
- its name and place in the system structure strongly indicates
its meaning
- an interface is the complete abstraction of an implementation
from the perspective of any client
- and interfaces completely isolate the implementation from its
environment
- anticipation of change (open closed)
- modularity and composition allows changing implementations
whithout changing interfaces, dependencies and dependents
- a system in Dezyne is inherently protected from changes
propagating2
- generality
- Dezyne allows trivially substituting components offering a
port of a compatible interface type
- Dezyne’s data independence3 allows components to be more general
- incremental development
- increments in Dezyne can obviously follow component scope
- Dezyne supports use case driven development or cross-cutting
features equally well
- testability
- trace generation allows for 100% test coverage of code paths