Event storming PlantUML diagram template and VS Code snippets
I started working on this event-storming plant uml template inspired by C4-PlantUML but found it impractical to use due to layout limitations in PlantUML. Event storming relies a great deal on being able to position elements relative to other elements. PlantUML supports this in theory, but in practice I found the layout results to be unpredicable. See [Known Issues] for more details.
Source: samples/EventModel.puml
Source: samples/EventModelLeftRight.puml
There are some significant issues with this template that have made me abandon it for now. I might pick it up again sometime in the future if I can figure out some reasonable ways to solve these.
Unfortunately, layout options in PlantUML produce rather inconsistent results - especially when dealing with groups of items. It seems to be impossible to consistently ensure that groups of items are positioned the way you want relative to other groups of items.
In an ideal world, the layout engine would:
- default to displaying each card from left to right in the order that they are listed in the file
- if two of the same type of card are listed in a row, they should automatically stack vertically
- allow you to place cards in groups called bounded contexts
- allow you to place cards in groups called aggregates - which can be placed inside of bounded contexts, but not inside of other aggregates
- allow you to connect individual cards in bounded contexts to cards in other bounded contexts
- allow you to connect individual cards in aggregates with cards in other aggregates
- allow you to connect aggregates to each other
- allow you to connect bounded contexts to each other
- when items are connected, the groups (bounded contexts and/or aggregates) containing those items can move relative to other groups, but the items within the groups should not move
This might be possible by creating a new layout engine for graphviz and offering that layout option in plantuml... or maybe creating a new mermaid diagram type?... but that's a lot more work than I was planning...
PlantUML has an option called WrapWidth that I was hoping to use, but it doesn't apply to the description lines in the cards I've created. Under the hood, I'm using classes for cards. The wrapwidth option would work if I used rectangles instead, but then I'd lose some other important features that I get with classes but not with rectangles.