Lens
Was ist Lens?
In der IT bezeichnet „Lens“ (englisch für „Linse“) eine abstrakte Sicht- oder Zugriffsschicht, die eine bestimmte Teilmenge von Daten, Metadaten oder Systemressourcen fokussiert und damit komplexe Informationsmengen vereinfacht darstellt. Lenses sind wiederverwendbare, deklarativ beschreibbare Komponenten, die Lesen, Schreiben und Transformieren ohne Manipulation der Quelldaten ermöglichen.
Erläuterung
1. Funktionsweise
Eine Lens kapselt drei Operationen:
- *view* – extrahiert einen Ausschnitt aus einer Datenstruktur.
- *set* – aktualisiert diesen Ausschnitt immutabel.
- *over* – wendet eine reine Funktion auf den Ausschnitt an.
Mathematisch handelt es sich um einen sogenannten „Optic“-Typ, der die Kategorien Get/Set einhält.
2. Einsatzgebiete
- Cloud-Native-Observability: Im CNCF-Projekt „OpenLens“ (z. B. Lens Desktop) aggregieren Lenses Logs, Metriken und Events eines Kubernetes-Clusters zu einer rollenbasierten Konsole.
- Functional Programming: Bibliotheken wie `lens` in Haskell, `monocle` in Scala oder `partial.lenses` in JavaScript nutzen Lenses für tiefe, typ-sichere Updates in nested Records.
- Data Governance: Plattformen wie Azure Purview oder Collibra definieren „Business Lenses“, die technische Schemata in domänenspezifische Begriffe übersetzen.
- Security: Zero-Trust-Architekturen verwenden „Trust Lenses“, die den Sichtbarkeitsgrad von APIs basierend auf Identität, Kontext und Risikobewertung filtern.
3. Beziehung zu anderen Konzepten
- *Facade Pattern*: Lenses sind feingranularer und funktional; Facaden sind objektorientierte Schnittstellen.
- *View* (SQL/DDD): Eine SQL-View ist statisch; Lenses sind parametrisierbar und komponierbar.
- *Filter* (Log-Analytics): Lenses erzeugen keine neuen Datenströme, sondern projizieren nur die relevanten Felder.
4. Beispiel (TypeScript mit `monocle-ts`)
import { Lens } from ‚monocle-ts‘;
interface K8sPod {
metadata: { name: string; namespace: string };
spec: { containers: Array<{ name: string; image: string }> };
}
const namespaceLens = Lens.fromPath<K8sPod>()([‚metadata‘, ’namespace‘]);
const newPod = namespaceLens.set(‚production‘)(oldPod);
5. Nützlichkeit
- Senkt kognitive Komplexität, indem nur das Wesentliche exponiert wird.
- Erhöht Wartbarkeit durch lose Kopplung zwischen Rohdaten und Verbrauchern.
- Ermöglicht domänenspezifische Governance-Richtlinien („Lens Policies“).
Typische Synonyme / verwandte Begriffe
Focus, Prism (für optionale Daten), Traversal (für Listen), ViewModel, Observability Lens, Business Lens.
Quellen / Normen
„Optics for the Working IT-Professional“ – Whitepaper, Functional Works 2024
• CNCF Landscape-Eintrag „Lens IDE“ (Stand: 2025-06)
• ISO/IEC 25010:2023 – Abschnitt „Data Accessibility & Filtering“