-
Notifications
You must be signed in to change notification settings - Fork 1
Draft Architectural Design Rationales
Christian Prior-Mamulyan edited this page Jul 6, 2025
·
1 revision
I will keep track of important design decisions in here.
-
Workflow Layering
-
Main.xaml: handles framework integration, not business logic. -
Process.xaml: central control for retries, error handling, logging. -
Modules: functional building blocks invoked byProcess.xaml. -
Units-of-Work: fine-grained, testable workflows.
-
-
Shared Complex Object Passing
- Decision: Pass shared context (e.g.,
JObject,TransactionItem,Dictionary) fromProcess.xamlto modules. - Driver: Centralize context; avoid repeated deserialization.
- Decision: Pass shared context (e.g.,
-
Flat Arguments in Units-of-Work
- Decision: Use flat
In_arguments in low-level workflows. - Driver: Facilitate unit testing and signature clarity.
- Decision: Use flat
-
JObject at Entrypoint
- Decision: Accept
JObjectas input from Orchestrator/Maestro. - Driver: Matches external JSON payload directly.
- Decision: Accept
-
Deferred Marshalling
- Observation: Conversion to structured formats happens inconsistently across layers.
- Open Question: Where should marshalling to DTOs or dictionaries occur?
-
Low Initial Barrier to Use Coded Source Files
- Decision: Allow integration of
.vbor.xamlclass definitions or helper files. - Driver: Enable typed DTOs, validation helpers, or shared constants without heavy refactoring.
- Decision: Allow integration of
-
Use of Global Variables for Exception Data
- Decision: Use global
Workflowvariables to transfer information fromGlobal HandlertoMain.xamloutput. - Driver: Preserve error context for orchestrator or BPMN-level consumers.
- Decision: Use global
-
Linear Entrypoint Flow (No TransactionItem Loop)
- Decision:
Main.xamlexecutes a linear process, not REFramework-style looping. - Driver: Align with Maestro task model (one payload → one response), not queue-based repetition.
- Decision:
| Status | Meaning |
|---|---|
Proposed |
The decision has been suggested but not yet agreed upon. |
Accepted |
The team has agreed to adopt this decision. |
Superseded |
This decision has been replaced by a newer ADR. |
Deprecated |
This decision is no longer recommended for use but may still be in effect. |
Rejected |
The decision was considered but not adopted. |
Obsolete |
The decision is no longer relevant due to architectural or business changes. |
Amended |
The decision was modified after acceptance. Optional; not always used. |
Note
Help to improve this documentation. Submit feedback.
Copyright © 2025 Christian Prior-Mamulyan · License CC BY-SA 4.0