Intro
The main goal of Camundala is to use your Domain as much as possible in your Process Automation.
Define the Domain and let Camundala do most of the rest.
I gave a talk at the Camunda Community Summit 2022 that covers the basics - well, the DSLs got a bit nicer since then😉. Check out here Domain Driven Process Development
Why the Focus on the Domain?
Common Language
What have Users, Business Analysts and Developers in common?
Right, they should know the Domain that they are using or providing.
To have a common domain prevents that each team has its own domain model and speaks a (slightly) different language.
Vendor Independent
The Domain Model is specific to a Company and should not be coupled to a Software vendor or a BPMN-Provider in this case.
Specifies the Process
A Process, but also for example a User Task, can be described via its inputs and outputs, which must of course reflect your Domain.
So from the outside all you need to know, is how to interact with your process. And this how can we describe perfectly with domain objects.
Reusable
If for example you provide the domain objects for your processes, everyone can reuse them, when interacting with your processes or developing processes in the same domain.
Design
The design consists of three Layers:
-
Domain Specification
Defines your Domain that is needed to run the Process and interact with it.
-
BPMN DSL
Adds your Domain Model to concrete BPMN elements, like Process or User Task.
DSL stays for Domain Specific Language.
-
Function DSLs
Different DSLs that add the functionality. We have the following DSLs at the moment:
- api: Create a documentation from your Domain Models.
- simulation: Run integration- and/ or load Tests with your Domain Models.
There are more, but only in an experimental state:
- dmn: Create the configurations for the DMN Tester.
- camunda: Generate some of your Process Specification.
Technology
We use Scala 3 for everything, except the Process Specification (BPMN).
-
Process Specification
This is standard Camunda BPMN XML.
-
Domain Specification
We describe the Domain with Scala 3. Here we use mainly:
- Case Classes
- Enums
-
BPMN- and Function DSLs
You can use a simple language to describe your BPMNs and Functionalities. Under the hood we use:
Scala’s features for DSL design: curried functions, extension methods, symbolic method names and scripting capability. Another great such feature new to Scala 3 is the Context Function type.
Getting Started
Just go through the pages: