Hinweis: Dieser Blogbeitrag stammt aus der Zeit vor dem Zusammenschluss und wurde von ARS realisiert – heute Teil von ATVANTAGE. Unsere Erfahrung bleibt – nur unser Name hat sich geändert. Hier finden Sie weitere Informationen rund um die Fusion.

Lesezeit: 3 Minuten

 

Sheriff - Ordnung schaffen in TypeScript-Anwendungen

Der bisher in Angular gesetzte Aufbau von Anwendungen mit Modulen wird langsam durch die Einführung der Standalone Components in den neueren Angular Versionen ersetzt. Bei der Verwendung der Module in Angular war automatisch eine Ordnerstruktur vorhanden. Neben der Übersichtlichkeit verhindern die Module auch noch den unerlaubten Zugriff von außerhalb auf Komponenten, Services oder Funktionen, welche nur für den Gebrauch innerhalb eines Moduls gedacht sind. Durch den Wegfall der Angular Module ist es nötig, die Grenzen innerhalb einer Anwendung auf einem anderen Weg zu definieren. 

Auch wenn die Angular Module wegfallen, kann dennoch die Ordnerstruktur beibehalten werden, denn dadurch werden einfache Grenzen durch die Aufteilung in Domänen erschaffen. Dies wird auch als Horizontal Slicing bezeichnet. Mit der Gruppierung sollte auch klar sein, dass der Zugriff auf die Bestandteile einer Domäne von außerhalb eingeschränkt sein sollte und diese nur durch explizite Freigaben über die API angesprochen werden können.

Jedoch kann man eine Anwendung nicht nur horizontal in Domänen aufteilen, sondern zusätzlich auch in die Tiefe. Dies wird als Vertical Slicing bezeichnet.

 

Anhand des Schaubilds ist erkennbar, dass sich eine Domäne in unterschiedliche Features, den sogenannten Smart Components, gliedern lässt. Diese Komponenten haben externe Abhängigkeiten und lösen bspw. auch das Laden von Daten aus.
Ein Feature kann sich aus mehreren UI-Elementen zusammensetzen. Diese werden auch als Dumb Components bezeichnet, da sie oftmals nur bereits aufbereitete Daten an der Oberfläche anzeigen. In den jeweiligen Data Access Ordnern sind Entities, diverse Logik, Services und Utils beinhalten Hilfsfunktionen.

Vertical Slicing hat also den Vorteil, dass sich Entwickler im Projekt schnell zurechtfinden und wissen, an welcher Stelle sie ihre Implementierungen ablegen müssen. Aber ein weitaus wichtigeres Argument für diese Aufteilung ist die Möglichkeit, die Zugriffe innerhalb der Domäne zu steuern. Das spielt eine große Rolle, weil ein Feature Abhängigkeiten zu UI-Elementen, Data-Access oder Hilfsfunktionen in der Util haben kann, wohingegen eine Hilfsfunktion keine Abhängigkeiten zu höheren Ebenen wie der UI-Elemente haben sollte. 

Es ist ersichtlich, dass die horizontale und vertikale Aufteilung einer Anwendung sinnvoll ist, um gewisse Grenzen und Abhängigkeiten zu definieren. Wie aber lässt sich diese Aufteilung und der Dependency Flow beim Entwickeln der Applikation forcieren?
 

Sheriff

Eine Antwort auf diese Frage ist die Bibliothek Sheriff. Sie ermöglicht die Einhaltung der Domänengrenzen und des Dependency Flows mit Hilfe von ESLint.

Im einem Angular Projekt können diese Bibliotheken mit folgenden Befehlen installiert werden:

npx ng add @angular-eslint/schematics
npm install –save-dev @softarc/eslint-plugin-sheriff

Durch die Integration von Sheriff wird in einer Anwendung Module Encapsulation aktiviert. Dafür muss lediglich in einem Ordner die index.ts Datei als Barrell File hinzugefügt werden und dieser wird von Sheriff wie ein Modul behandelt. Die ergänzte index.ts bestimmt, was nach außen hin sichtbar ist und jeder Zugriff auf das Modul muss über die entsprechende index.ts referenziert werden. Falls dennoch versucht wird von außerhalb auf ein nicht in der index.ts exportiertes Element zuzugreifen, wird dies im Code entsprechend als Fehler vom Linter gekennzeichnet.

 

Die Regeln, die den Dependency Flow festlegen, werden in der SheriffConfig erfasst und im Root Verzeichnis des Projektes abgelegt. Bei der Konfiguration werden die Ordner, die als Modul fungieren sollen, innerhalb der 'tagging' Eigenschaft markiert. Die Konfiguration im Codeblock zeigt, wie für verschiedene Pfade die Zugriffsregeln getagged werden. Die Zeile für src/app/booking/feature ist so zu verstehen, dass das Verzeichnis der Domäne booking zugehörig ist und vom Typ feature ist. Das Verzeichnis src/app/booking/feature hat also 2 Tags.

Die Eigenschaft 'depRules' der SheriffConfig listet die erlaubten Abhängigkeiten auf.

Im Beispiel wird für die Domäne booking diese Zugriffsregel definiert 'domain:booking': ['domain:booking', 'shared']. Die Konfiguration lässt zu, dass innerhalb der Domäne keine Restriktionen vorhanden sind. Zusätzlich darf auch auf die Domäne 'shared' zugegriffen werden. Zeile 'type:feature': 'type:data' hingegen lässt den Zugriff von feature zu data zu, jedoch ist ein Zugriff aus dem data Modul in ein feature Modul nicht zulässig.

 

 

Fazit

Sheriff fängt das fehlende Modul System bei Angular Projekten auf, welche als Standalone Component Anwendungen gebaut werden. Die Integration der Bibliothek ermöglicht auf einfachen Weg eine horizontale und vertikale Aufteilung der Anwendung, wie bereits erläutert. 

Im Vergleich zu Barrel Files, bei welchen zwar definiert ist, welche Klassen und Funktionen nach außen hin sichtbar sind, ist Sheriff weitaus mächtiger. Es werden hier - ähnlich wie bei Barrel Files -  Elemente exponiert, aber zusätzlich werden unerlaubte Zugriffe deutlich markiert und verhindert.

Hinzu kommt, dass es keine Rolle spielt, ob Angular als Framework verwendet wird oder eine andere Technologie. Relevant ist nur, dass TypeScript als Sprache verwendet wird.

Sheriff ist eine leichtgewichtige Library, bei der der Einsatz eine Überlegung wert ist. Denn wer will nicht mit relativ wenig Aufwand viel Struktur in eine Anwendung bringen?

Blogautor

David Nguyen
Softwareentwickler ARS Computer und Consulting GmbH
Sven Grabowski
Softwareentwickler ARS Computer und Consulting GmbH

Mit uns arbeiten

Sie suchen einen Partner, der nicht nur berät, sondern mit Ihnen gemeinsam gestaltet? Ob Strategie, Technologie oder Umsetzung – wir unterstützen Sie entlang der gesamten digitalen Wertschöpfungskette. Lernen Sie unsere Leistungen kennen und finden Sie genau den Einstieg, der zu Ihren Zielen passt.

Bei uns arbeiten

Du willst nicht nur abwarten, was als nächstes passiert, sondern es mitgestalten? Dann bist du bei uns genau richtig. Wir suchen Menschen mit Haltung, Leidenschaft und Lust auf Wirkung – Entwickler:innen, Strateg:innen, Consultants und Kreative, die mit uns digitale Lösungen vorantreiben möchten.

Bild zur Newsmeldung Zugriffsberechtigung
News 08.04.20

Bringen Sie Ordnung in Ihren Berechtigungsdschungel

Wie behalten Sie die Übersicht über Ihre Zugriffsberechtigungen?

novaCapta: Ihr Partner für die digitale Transformation mit Microsoft Technologien
Übersicht

Branchen- & Abteilungsspezifische Anwendungen

Unsere IT-Dienstleistungen und Lösungen für spezielle Branchen sowie Fachbereiche in Unternehmen

Produkt 11.04.23

Ideenmanagement-Software für lokale Anwendungen

Ideenmanagement-Software mit SAP-Technologie: Optimieren Sie Ihr Ideenmanagement für mehr Beteiligung und höheren Nutzen.

Produkt 11.04.23

Kampagnenmanagement-Software für die Anwendung in der Cloud

Stärken Sie Ihre Innovationskraft mit target Campaign Management – unser Kampagnenmanagement-Tool für Ihre erfolgreiche Innovationskampagne.

novaCapta: Ihr Partner für die digitale Transformation mit Microsoft Technologien
Blog 30.10.19

Testen von Angular Anwendungen mit Cypress

Cypress ist ein End-to-End Testing Framework, mit dem man einfache Tests erstellen kann, die in Echtzeit ausgeführt werden. Mit Cypress kann man auch Snapshots von den einzelnen Schritten während der Testausführung sehen. Tests können schnell erstellt werden, ohne dass bestimmte Server oder Driver benötigt werden.

Blog

Verbindungen schaffen: Stephen zwischen catworkx & Atlassian

Verbindungen schaffen, Mehrwert gestalten: Stephen über seine Rolle als Brückenbauer zwischen catworkx und Atlassian

Blog 02.02.24

So kommt Ordnung in den Infrastructure as Code-Werkzeugkaste

Ordnung im IaC-Dschungel: Welches Tool passt? Dieser Artikel gibt Überblick über die wichtigsten Werkzeuge für Infrastructure as Code.

Puzzleteile
News 28.07.20

novaCapta und ConVista schaffen gemeinsam neue Lösungen

Die hochspezialisierten Microsoft- bzw. SAP-Partner begründen neue Partnerschaft für hoch integrierte Lösungen auf Basis von SAP- und Microsofttechnologien.

Blog 01.08.24

Migration von HOST-Anwendungen zu AWS: Modernisierung

Lernen Sie, wie moderne AWS-Services nahtlos in bestehende Host-Landschaften integriert werden und profitieren Sie von den Vorteilen von Serverless-Technologien.

senior man stares through glasses
Lösung 31.08.23

Anthos-Integration für konsistente Cloud-native Anwendungen

Entdeckt Anthos, die cloudbasierte Container-Plattform, die moderne Apps überall konsistent und skalierbar ausführt. CLOUDPILOTS unterstützt Euch bei der nahtlosen Integration.

News 08.06.22

Schnellere App-Entwicklung dank Mendix-Partnerschaft

Die TIMETOACT GROUP baut ihre Kompetenz rund um Low-Code durch eine Partnerschaft mit den Experten von Mendix weiter aus.

Referenz

Turck Holding schafft effizientere IT-Struktur

Mehr Effizienz und Struktur durch eine nachhaltige IT-Strategie: Die Turck Holding GmbH stellt ihre IT-Organisation neu und zukunftssicher auf.

Social

Sommerfest Wasserski & BBQ 2022

Jedes Jahr laden wir alle Mitarbeitenden und deren Familien ein, um gemeinsam einen gemütlichen Tag am Wasserski See in Langenfeld auf und neben dem Wasser zu verbringen.

Social

Gemeinsam sind wir stark! - ITCS-Messe in Köln 2024

Das haben wir im September auf der ITCS-Messe in Köln wieder einmal bewiesen. Als Team haben wir die Vielfalt unserer Group präsentiert und für viel Aufmerksamkeit gesorgt! Besonders stolz sind wir auf die inspirierenden Vorträge von Hermann, Lisa und Matthias über Künstliche Intelligenz und den Zusammenhalt in der TIMETOACT GROUP sowie Vanessa, die ihren Weg als Frau in der IT auf der Women in Tech Bühne geteilt hat. Auch Benedict und Sophia haben mit ihrem Beitrag über das perfekte Rezept für Design -& Frontend-Projekte überzeugt und Innovationen gezeigt.🚀 Ein weiteres Highlight war der spannende Vortrag zu effizienten visuellen Regressionstests im CI/CD-Kontext von Marius🛠️ Ein großer Dank geht auch an Johanna, die den gesamten Tag so engagiert die Women in Tech Bühne moderiert hat.

News 11.12.24

JOIN(+) wird Teil der TIMETOACT GROUP

Köln/Villingen-Schwenningen, 11. Dezember 2024 – Die TIMETOACT GROUP erwirbt mit JOIN(+) ein erfahrenes Beratungshaus zu Big Data & AI. Die Geschäftsführer der JOIN(+) leiten das Unternehmen weiter.

Event 19.05.22

8. Zukunftskongress Staat & Verwaltung

Vom 20. bis 22. Juni 2022 findet der 8. Zukunftskongress Staat und Verwaltung live im bcc Berlin Congress Center statt.

Jun 20
News

Studie Legacy-Modernisierung 2022

Wo stehen Unternehmen aktuell beim Thema Legacy-Modernisierung? Mit dieser und weiteren Fragestellungen beschäftigt sich die Studie "Legacy-Modernisierung 2022".

Event

Rethink! IT 2022!

Treffen Sie die Expert*innen der TIMETOACT GROUP auf dem Kongress rund um Digitalisierungsstrategien

Sep 21
News 29.09.22

TIMETOACT GROUP erwirbt Monitoring Spezialist OpenAdvice

Wir erweitern unser Angebot im Bereich Application Performance Monitoring und Business Service Assurance durch den Erwerb der OpenAdvice IT Services GmbH.

Standort

Barcelona

Finden Sie die catworkx S.L. Spain: Av. Diagonal 640, Planta 6 08017 Barcelona, Spanien, +34 936 07 24 80, info-es@catworkx.com

Bleiben Sie mit dem TIMETOACT GROUP Newsletter auf dem Laufenden!