Ist der Angular & TypeScript Workshop die richtige Entscheidung?
Der Besuch eines Angular & TypeScript Workshops
von Michael Wellner.
Vom 12.02. - 14.02.2020 war ich auf dem âAngular & TypeScript Intensiv Workshopâ von workshops.de / angular.de in Berlin. Ich bin aktuell in einem Angular Projekt tĂ€tig, weshalb ich schon etwas Vorwissen mitbrachte. Nach einer kurzen Vorstellung des Trainers und der geplanten Inhalte, hatte jeder/jede Teilnehmer:in die Möglichkeit sich vorzustellen. Was ziemlich cool ist, es gibt ein Online Portal, zu dem die Teilnehmer:innen Zugriff haben und sich wĂ€hrend und auch nach dem Workshop noch Folien und Aufgaben anschauen können und sich zusĂ€tzlich noch per Chat austauschen können.
Einleitung
đĄ Keine Lust zu lesen?
Nicht jeder lernt am besten aus BĂŒchern und Artikeln. Lernen darf interaktiv sein und SpaĂ machen. Wir bieten dir auch Angular Intensiv-Schulungen an, damit du tiefer in die Thematik einsteigen kannst.
Mehr Informationen zur Angular-Schulung
Da der Trainer sich auch mit React auskennt, wurde zu Beginn natĂŒrlich erst mal diskutiert, warum man sich denn fĂŒr Angular entscheiden sollte. Die Folien sagten so Dinge wie: Baut auf Erfahrungen von AngularJS auf, bietet dem Entwickler UnterstĂŒtzung das Richtige zu tun, versucht sich sehr nah an Web Standards zu halten, hat eine gute Wartbarkeit und es gibt ganzheitliche Lösungen fĂŒr bekannte Herausforderungen wie z.B. i18n oder Animations. Ich selbst wĂŒrde noch hinzufĂŒgen, dass die Angular CLI ziemlich ausgereift ist, da diese einem gewisse Tipparbeit abnehmen kann. AuĂerdem bietet Angular solche Features wie Ahead-of-time-Compilation und Server-Side-Rendering. ZusĂ€tzlich sollte man natĂŒrlich auch die Trends nicht aus den Augen verlieren. Der Punkt, dass Angular ein sehr groĂes Bundle ausliefert ist sicher nicht ganz falsch, jedoch kann man hier durch Architektur (Lazy Laoding) und AktualitĂ€t (Angular 9 Ivy Compiler) einiges âreinholenâ.
TypeScript
Als erster groĂer Punkt war TypeScript dran. Beginnend mit den Begrifflichkeiten âJSâ, âESâ, âTSâ. ES - oder besser gesagt ECMAScript ist der offizielle Standard fĂŒr JavaScript. Nach ES5 gab es einen Switch auf die Jahreszahlen in der Bezeichnung, weshalb ES2015 folgte. Dieser Standard ist wichtig fĂŒr die FunktionalitĂ€ten die man verwendet und welche der Ziel Browser unterstĂŒtzt. Das so genannte Transpilieren erfolgt dann ĂŒber Babel, was bereits mit einem Angular Projekt ausgeliefert wird. Vergleichbar mit Java wĂ€re das so âich entwickle mit den coolen Java 8 Features und Babel transpiliert die App in Java 7 fĂŒr meinen alten Serverâ (was leider nicht möglich ist bei Java). Mit ES5 gibt es einen gemeinsamen Nenner, um auch alte IE Browser zu verwenden. Deshalb ist meistens das Ziel den Code in ES5 zu transpilieren.
NatĂŒrlich wurden die Typen vorgestellt, und auch ĂŒber Type Inference gesprochen, darauf möchte ich aber hier nicht eingehen.
Ein wichtiger Punkt war jedoch, dass das VerhĂ€ltnis der Zuweisungen mit const zu let mindestens 70/30 betragen soll. Hier hilft einem auch der TSLinter und zeigt Variablen an, welche nicht mehr ĂŒberschrieben werden aber fĂ€lschlicherweise mit let zugewiesen wurden.
Bei TypeScript gibt es mit dem Typ any eine Möglichkeit den Typ quasi weg zu lassen. Was ich davor schon des Ăfteren gelesen hatte, bestĂ€tigte der Trainer: HauptsĂ€chlich ist es die Faulheit des Entwicklers - darauf passt auch folgender Kommentar âany ist das neue TODOâ. Aber es muss nicht nur Faulheit sein, sondern kann auch die Unwissenheit ĂŒber den Typ sein, vor allem bei Third-Party-Libraries. Hier kann jedoch das GitHub Projekt âDefinitelyTypedâ Abhilfe verschaffen, in dem man gewisse Typings herunterladen und somit seine Objekte typisieren kann. Sind die Objekte hier nicht zu finden, gibt es immer noch die Möglichkeit, durch eigene Interfaces, Typen zu vergeben. Deshalb ist der Trainer der Meinung, dass es eigentlich keinen Grund mehr fĂŒr die Verwendung von any gibt.
Des Weiteren wurden Closures angesprochen. Ein sehr komplexes und verwirrendes Thema (manchmal durch die âneueâ Schreibweise mit den so genannten Fat Arrows noch verwirrender), aber ein durchaus interessantes Konzept! Fat Arrow Funktionen wurden in diesem Zuge auch gleich besprochen.
AuĂerdem ging es darum, dass man z.B. als DTOs Interfaces den Klassen bevorzugen sollte. Das hat einen entscheidenden Punkt, dass Klassen beim Build echten Code erzeugen (also KBs die ausgeliefert werden), wĂ€hrend Interfaces kein Code erzeugen. Somit kann man damit definitiv die GröĂe der App beeinflussen.
Als Beispiel const book: { title: string, isbn: string} - das ist auch schon ein Interface.
AuĂerdem sind die Decorators (in Java die Annotations) aktuell fĂŒr TypeScript noch nicht freigegeben, weshalb ein jedes Angular Projekt (was nicht ohne Decorator auskommt) in der tsconfig Datei die experimentalDecorators:true setzen muss.
Angular
Eines vorweg: Da Angular 9 erst ein paar Tage vor dem Workshop erschienen ist, haben wir Angular 8 verwendet.
Zum Schluss des ersten Tages wurde die Angular CLI - vor allem der Angular Generator vorgestellt. Mit diesem kann man ganz einfach mittels ng generate component xyz oder ng generate directive abc (und weiteren) Klassen, Templates, CSS Dateien, mit vorgegebener Struktur generieren lassen.
AuĂerdem wurde der Zusammenhang zwischen Modulen und Komponenten besprochen. Man soll wohl nicht mit Modulen geizen, da diese dann sehr gut nachtrĂ€glich noch fĂŒr ein Lazy Loading verwendet werden können. AuĂerdem hat der Trainer Angular Material als Beispiel genommen, dort ist jede Komponente gleichzeitig ein Modul, welches man ganz einfach importieren und somit die Komponente verwenden kann.
Am zweiten Tag haben wir mit der wirklichen Programmierung begonnen und mit der Angular CLI eine App, zwei Module und mehrere Komponenten erzeugt. Es ging darum in den verbleibenden zwei Tagen eine BĂŒcherverwaltung (Liste, Buch anzeigen, Buch editieren) zu entwickeln. (Auf den Code möchte ich hier nicht mehr nĂ€her eingehen, lediglich auf ein paar allgemeine Konzepte)
Zu Beginn haben wir also mit der Angular CLI die App, zwei Module und ein paar Komponenten erzeugt. Die Navigationsleiste haben wir aktuell noch mit echten Verlinkungen (so genannten âfull-page-reloadsâ) versehen, was eigentlich nicht dem Konzept einer SPA (Singe-Page-Application) entspricht, aber das Thema Routing war erst an Tag 3 dran. Danach wurden die wichtigen Konzepte Property- und Event-Binding besprochen und anhand von kleinen Beispielen nach programmiert (Button-Klicks, Ausgeben der Maus-Position). Dies war dann der Start fĂŒr die âechteâ Komponenten Programmierung mit Inputs (Property Binding einer Komponente) und Outputs (Event Binding einer Komponente).
Um nun Daten einfacher zwischen Komponenten zu teilen, gibt es die Services in Angular, welche durch den Injectable Decorator in jeder beliebigen Komponente eingebunden werden können (analog zur Dependency Injection mit Spring in Java). Wenn man provideIn: 'root' angibt, registriert man den Service global. Dependency Injection wird bei Angular aus denselben GrĂŒnden wie bei Spring verwendet: Komponenten Klassen sauber halten (man braucht lediglich eine private Variable im Konstruktor) und man kann den Code besser testen. Jedoch hat man schnell mit zirkulĂ€ren AbhĂ€ngigkeiten zu kĂ€mpfen und muss deshalb aufpassen, wo man was injected, auĂerdem kommt es auch auf die Ebene an, in der man injected, da es sonst eventuell kein Singleton mehr ist und man Probleme mit der Datenkonsistenz bekommt.
Das Thema Observables wurde auch angesprochen, da dies aber sehr komplex ist, möchte ich hier in meinem Artikel nicht groĂartig darauf eingehen. Observables oder RxJS ist die Implementierung von reaktiver Programmierung im Frontend. Der von Angular angebotene HttpClient basiert auf Observables, weshalb man in einer App mit REST Aufrufen zwangslĂ€ufig nicht um Observables herumkommt. Wir haben die bereitgestellte âbookmonkey-apiâ verwendet, welche wir via npm installiert haben und dann auf einem separaten Port gestartet haben.
Zum Schluss des zweiten Tages haben wir noch die Lifecycle Hooks einer Komponente erklĂ€rt bekommen. Es gibt hier die Möglichkeiten auf verschiedene ZustĂ€nde einer Komponente zu reagieren. Der dritte Tag begann mit zwei Hinweisen: Das Thema âContent Projectionâ soll wohl sehr interessant sein und man soll sich das mal nach dem Workshop anschauen. AuĂerdem hat der Trainer gezeigt, wie man mittels âwebpack-bundle-analyzerâ sein auslieferbares Bundle vor allem mit Blick auf die SpeichergröĂe analysieren kann.
Das wichtigste an diesem Tag war das Thema Routing. Wir haben in unserer App Routing eingebaut um auf die Liste der BĂŒcher und auf eine About Seite zu navigieren (ohne âfull-page-reloadâ). Es wurde darĂŒber diskutiert in welchem Module die Pfade registriert werden sollten. Unser BookRouting Module hat dann den Pfad book bekommen und zusĂ€tzlich haben auch noch die children :isbn und :isbn/edit angelegt. Diese wurden benötigt, um die Details eines Buches anzeigen zu können.
Zum Schluss des Tages haben wir Forms angeschaut - zuerst den Template Driven Ansatz und danach Reactive Ansatz. Der Hauptunterschied ist, dass man beim Template Driven Ansatz die Erstellung und Konfiguration im HTML Template hat, wĂ€hrend man beim Reactive Ansatz den gröĂten Teil im Code (Typescript Date) macht. Deshalb sind Template Driven Forms hauptsĂ€chlich fĂŒr einfach Forms wie ein Login geeignet. Eine Form haben wir fĂŒr das Editieren eines Buches unter :isbn/edit aufgerufen, um dort dann mittels Input Felder und Validierung das Buch zu Ă€ndern und wieder zu speichern. Die ISBN haben wir dabei der vorher angelegten Route mittels Parameter ĂŒbermittelt.
Ganz am Ende hat uns der Trainer dann noch Unterlagen bezĂŒglich Angular Testing freigeschalten, welche sich jeder bei Bedarf im Nachgang noch anschauen kann.
đĄ Hat dir das Tutorial geholfen?
Wir bieten auch Angular-Intensiv-Schulungen an, um dich möglichst effektiv in das Thema Angular zu begleiten. Im Kurs kannst Du die Fragen stellen, die Du nur schlecht googeln kannst, z.B. "Besserer Weg, um meine Applikation zu strukturieren?". Wir können sie Dir beantworten.
Jetzt weiter lernen
Persönliches Fazit
Richtig cooler Workshop, vor allem fĂŒr Angular AnfĂ€nger. Persönlich hatte ich bereits gewisse Vorkenntnisse und habe mich deshalb zusĂ€tzlich noch etwas mit Angular Material fĂŒr das Design und ag-grid fĂŒr eine ansprechende BĂŒcherliste in Tabellenform beschĂ€ftigt. Ich habe vieles aus dem Workshop mitgenommen und er hat mir gezeigt, dass ich auf dem richtigen Weg bin was meine Vorkenntnisse angeht. Angular ist wirklich sehr interessant, und nimmt einem einiges ab (Stichwort CLI, Webpack und Babel). AuĂerdem kann man - wenn man diszipliniert Clean Code macht - durch Trennung von HTML, CSS und TypeScript, seine App sehr gut strukturieren. Deshalb kann ich definitiv sagen, dass es die richtige Entscheidung war Angular zu lernen.
Michael Wellner
Michael Wellner arbeitet seit fĂŒnf Jahren als Softwareentwickler bei der Firma sidion. Mit groĂer Leidenschaft entwickelt er GeschĂ€ftsanwendungen fĂŒr seine Kunden in diversen Branchen. UrsprĂŒnglich nur im Backend Bereich mit Spring Boot & Spring Cloud, seit 2020 aber auch Fullstack mit Angular im Frontend. Dabei setzt er auf agile Methoden & Software Craftmanship. DarĂŒber hinaus interessiert er sich fĂŒr Automatisierung und ProduktivitĂ€t. Firmenintern versteht er sich als Wissensmultiplikator, z.B. durch Betreuung der Azubis oder Bereitstellung von Schulungsunterlagen.
Weitere Artikel
Ist der Angular & TypeScript Workshop die richtige Entscheidung?
Ein kleiner Einblick von Michael Wellner in den Angular & TypeScript Workshop
Neues Workshop-Format: Lerne die Grundlagen von Angular in unserem 5-Halbtage-Workshop
Wir einen 5-Tages-Workshop entwickelt. Dieser bietet euch die Möglichkeit neue FÀhigkeiten zu erlangen, ohne in Projekten auszufallen.
Angular v21: Signal Forms, AI-Tools und Zoneless Change Detection
Angular v21 ist da! Signal Forms revolutionieren die Formularentwicklung, wÀhrend AI-Tools und zoneless Change Detection die Developer Experience auf ein neues Level heben.