22.02.26
Knowledge
Design System Factory Pattern (Ninox)
Die Idee
Was wäre, wenn ihr eine einzige Funktion hättet, die euer komplettes Design System enthält – Farben, Typografie und fertige Widget-Konfigurationen? Und ihr diese Presets direkt an die Widget-Funktionen übergeben könntet?
So sieht das aus:
Ein Aufruf. Fertig. Keine 10+ Properties mehr pro Button. Die Defaults kommen aus dem Design System, die dynamischen Werte (Title, Actions, ID) gebt ihr mit.
Wie funktioniert das?
Die Funktion nimmt einen data-Parameter entgegen und baut die dynamischen Werte direkt in die Presets ein:
Der Trick: Kein Spread-Operator nötig
In Ninox gibt es kein {...defaults, ...overrides} wie in JavaScript. Das war bisher das Hindernis für solche Patterns.
Die Lösung: Die Funktion selbst ist die Factory. Sie nimmt eure dynamischen Werte entgegen und baut das fertige Config-Objekt zusammen. Lokale Variablen (let primaryBase := ...) sorgen dafür, dass die Presets die gleichen Farben wie das colors-Objekt verwenden – Single Source of Truth.
Anwendungsbeispiele
Primary Button:
Secondary Button:
Badge:
Was bringt das?
Konsistenz – Alle Buttons/Badges sehen automatisch gleich aus, überall
Weniger Code – Statt 10+ Properties pro Widget nur noch die dynamischen Werte
Single Source of Truth – Farbe ändern? Nur an einer Stelle
Pro Kunde konfigurierbar – Jeder Kunde/jedes Projekt bekommt seine eigene Design-System-Funktion
Sofort nutzbar – Keine Widget-Änderung nötig, funktioniert mit der aktuellen Version
Erweiterungspotenzial
Das Pattern lässt sich beliebig ausbauen:
Weitere Varianten:
buttonDanger,buttonGhost,badgeSuccess,badgeWarningMehr Widget-Typen:
text,textHeading,icon,input,selectResponsive Presets: Unterschiedliche Sizes je nach
isMobileMehrere Design Systems:
designSystemLight(),designSystemDark()
Status: Experiment
Wir haben das Pattern getestet und es funktioniert direkt – ohne Anpassungen an den Widgets. Das ist aktuell ein Experiment und wir sind gespannt auf euer Feedback:
Nutzt ihr bereits ein ähnliches Pattern?
Welche Widget-Presets wären für euch am nützlichsten?
Seht ihr Probleme oder Verbesserungsmöglichkeiten?
Schreibt uns eure Gedanken in unserem Discord Channel!