Liking cljdoc? Tell your friends :D

marp: true theme: gaia #theme: uncover class: invert author: "Ludger Solbach"

overarch

data driven system modelling

Ludger Solbach

bg cover 100%


The problem

understanding complex systems


Rationale

system models for

  • documentation
  • querying
  • communication
  • thinking

Rationale

drawing tools e.g. Visio, Gliffy, ExcaliDraw

  • no model, only pretty pictures
  • no reuse between diagrams

Rationale

commercial modelling tools

  • e.g. Enterprise Architect, Magic Draw
  • comprehensive but complex
  • license needed

Overarch

  • lightweight open source modelling
  • data driven and text based
  • with visualization

Models

elements of the system

  • concept models, concept maps and glossaries
  • system landscape and architecture, deployment
  • use cases, state machines and class models

Models

models as data

  • hierarchical models and element references
  • composable / reusable
  • extensible

Views

representations of the system

  • selection of model elements for a specific
    • context
    • audience
    • level of detail

Views

  • c4 views
  • system context

Views

views as data

separation of models and views view specific customization of model elements


Queries

  • queries as data *

Rendering

  • PlantUML
    • C4 views, UML views
      • use case, state machine and class diagrams
    • styling and sprite support
  • GraphViz
    • concept maps
  • Markdown
    • glossaries
    • textual representations of graphical views

Exporting

  • exports
    • JSON if you need to process models with languages without EDN support
    • Structurizr experimental

Example Model

bg right 100%


Example View

bg right 100%


Example Diagram

bg right 70%


Example Diagram

bg right 90%


Extensible Data Notation (EDN)

Similar to JSON but richer set of data literals Subset of Clojure


EDN - Primitives

Numbers: 123 Strings: "Hello" Keywords: :keyword, :namespaced/keyword


EDN - Data Structures

Vectors: ["a" "b" "c"] Sets: #{"a" "b" "c"} Maps: {:a "a" :b "b" :c "c"}

Data structures can be nested


Modelling Example

#{ ; set of model elements
  {:el :system
   :id :example/system1
   :name "Example System"
   :desc "An example system to show how to model in overarch"
   :ct #{ ; set of children
         {:el :container
          :id :example/container1
          :name "Example Container"
          :tech "Java"
          :desc "Deployable application in the example system"}}}
}

Modelling Methods

C4 Model: Architecture Model, Deployment Model, Dynamic Model UML: Use Case Model, Class Model, State Machines Concept Maps: Concept Model


Architecture Model

Elements

:person :system :container :component :enterprise-boundary :context-boundary

Relations


Deployment Model

Elements

:node :system :container :component

Relations


Dynamic Model

Elements

:person :system :container :component

Relations


Use Case Model

Elements

:use-case :actor :person :system :context-boundary

Relations

:uses :include :extends :generalizes


State Machine

Elements

:state-machine :start-state :state :end-state :fork :join :choice :history-state :deep-history-state

Relations

:transition


Class Model

Elements

:class :enum :interface :field :method :function :package :namespace :stereotype :annotation :protocol

Relations

:inheritance :implementation :composition :aggregation :association :dependency


Concept Model

Elements

:concept :person :system :container :enterprise-boundary :context-boundary

Relations


Views

Views define

  • which model elements rendered
  • how the model elements are rendered

Rendering


Export

JSON EDN Structurizr (architecture/deployment model and views only)


Can you improve this documentation? These fine people already did:
Ludger Solbach & Solbach, Ludger (FDP4_EXTERN)
Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close