Architektur und Coding in C#
Dieses Software-Lab bietet euch die Möglichkeit, Vertrautheit in der Programmierung mit C# aufzubauen. Es liefert praxisnahe Hilfen, Tipps und Regeln für gutes Coding und für eine klare, gut wartbare Backend-Architektur.
- Zeitraum und zeitliche Organisation der Veranstaltung
-
12.09.2022 - 16.12.2022. Organisiert als insgesamt 6 Sprints zu je 2 Wochen. Weitere Details siehe unten.
- Ort der Veranstaltung
-
-
Raum:
Arena (Offener Kreativbereich im Mündelheimer Weg)
-
Videokonferenz-Link:
siehe individuelle Einladung
(nur in Ausnahmefällen und wenn explizit vorher für den Tag kommuniziert)
- Git-Repo für die Übungen
-
https://gitlab.com/archi-lab/architecture-and-coding/participants. Bitte lassen Sie mir vorab Ihren {{ gitHost }}-User-Account zukommen.
- Youtube-Kanal
-
Für diese Veranstaltung sind Lehrvideos auf Youtube verfügbar. Abonnieren Sie dafür am besten den Kanal
ArchiLab.
Für die Videos zu dieser Veranstaltung gibt es eine
Playlist.
(Disclaimer - die Videos auf diesem Kanal sind nicht monetarisiert. Weder ich persönlich noch das Labor ArchiLab verdienen damit Geld. Wir nutzen YouTube vor allem deshalb, weil es für Studierende ein leicht zugänglicher Kanal ist. Außerdem bekommen wir als Labor an der TH Köln so auch Sichtbarkeit nach außen, was z.B. bei dem Einwerben von externen Gastvorträgen hilft.)
Inhalt
- Learning Outcome
- Workshops
- Mon 12.09.2022, 13:30 - 16:00: Kickoff
- Tue 27.09.2022, 14:00 - 17:00: Das Vorgehen beim objekt-orientierten Programmieren
- Tue 08.11.2022, 15:00 - 16:30: Domain-Modelling und Live-Beispiel-Coding
- Tue 15.11.2022, 15:00 - 16:15: Unterschied Entity / Value Object und Einstieg in unseren Meilenstein
- Tue 22.11.2022, 15:00 - 16:15: Clean Code
- Tue 29.11.2022, 15:00 - 16:30: Schichtenmodell und Persistenz
- Tue 06.12.2022, 15:00 - 16:15: SOLID
- Tue 20.12.2022, 15:00 - 16:15: Domain Primitives
- Tue 03.01.2023, 15:00 - 16:15: Was sind Aggregates? Und wofür braucht man die?
- Tue 10.01.2023, 15:00 - 16:15: EF Core 6 - zweiter Teil
- Tue 17.01.2023, 15:00 - 16:15: REST-Prinzipien
- Tue 24.01.2023, 15:00 - 16:15: REST-Implementierung
- Sprint-Meilensteine
Learning Outcome
In diesem "Software-Lab zum Mitmachen" wird großer Wert darauf gelegt, theoretisches Wissen auch praktisch anwendbar zu machen. Folgendes Lernziel ("Learning Outcome") liegt der Schulung zugrunde. Das also habt ihr am Ende gelernt, wenn ihr für euch das Beste aus der Schulung herausholt.
Als SW-Entwickler:in kann ich ein Softwaresystem für eine gegebene Aufgabenstellung iterativ konzipieren und in C# implementieren,
indem ich ...
- mich mit den wesentlichen Konzepten von C# auseinandersetze und diese praktisch anwenden kann,
- Aufgabenstellungen objektorientiert in C# umsetzen kann,
- auf Basis des Domain-Driven-Design (DDD) mein System in Building Blocks (Entities, Value Objects) aufteile und diese in einem C#-basierten Backend mit Datenbankanbindung umsetze,
- dabei Hilfsmittel für gutes Software-Design, wie die SOLID-Prinzipien und die Regeln des Clean Code kenne und in meinem Code anwende,
- meine Domäne(n) in Aggregates strukturiere,
- diese Aggregates als REST Level 2 API für die Kommunikation mit Umsystemen und Clients verfügbar mache,
damit ich eine nachhaltig wartbare Software mit passender, langlebige und änderungsfähiger Architektur erstellt habe.
Workshops
Mon 12.09.2022, 13:30 - 16:00: Kickoff
Wir besprechen die Inhalte und die Organisation des Software-Labs. Ihr könnt eure Fragen zu den Videos (oder zu anderen Aspekten) loswerden. Wir machen ein kleines Warmup zu objektorientierter Programmierung. Dann wird der erste Meilenstein PREP1 vorgestellt.
Ort des Workshops
Raum:
Arena (Offener Kreativbereich im Mündelheimer Weg).
Ziel des Tages
Ihr kennt die Rahmenbedingungen des Softwarelabs und könnt mit dem ersten Meilenstein beginnen.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
13:30 - 14:00:
Intro
-
14:00 - 14:30:
Warmup
Übung: Wir machen Pizza Funghi
- Welche Schritte und Zutaten braucht man für die Zubereitung von Pizza Funghi? Und was hat das mit Software zu tun? In diesem Warmup nähern Sie sich dem Pizzabacken in etwa so, wie Sie auch eine neue Software angehen würden. Für Pizzabacken, genau wie für Software, muss man sowohl die Strukturen wie auch die Abläufe kennen. Erst im Zusammenspiel der beiden Komponenten entsteht ein vollständiges Rezept - bzw. eine korrekt spezifizierte Software.
- Geht in zwei Gruppen irgendwohin, wo ihr Ruhe habt (im Raum oder in angrenzenden Räumen, es sollte genug frei sein)
- Diskutiert die Aufgabe miteinander
- anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse
-
14:30 - 16:00:
Inhalte des Softwarelabs
- Inhalte der kommenden Meilensteine
- Organisation
- Einführung in den ersten Meilenstein PREP1
Aufgabe bis zum nächsten Workshop
Nach dem Workshop bearbeiten Sie bitte
Meilenstein PREP1.
Tue 27.09.2022, 14:00 - 17:00: Das Vorgehen beim objekt-orientierten Programmieren
Objekt-orientiertes Programmieren braucht ein bisschen Struktur - wenn man einfach losprogrammiert, dann kommt wahrscheinlich eine lange "Gott-Methode", die alles kann, dabei heraus. Man landet dann (vielleicht ohne es zu wollen) beim eher prozeduralen Ansatz. Das ist für einfache Scripte ok, aber selbst bei kleinen Softwaresystemen führt das schnell in den Wartungs-Albtraum. Daher spielen wir in diesem Workshop die ersten Schritte im objekt-orientieren Ansatz einmal zusammen durch. Wir orientieren uns dabei am Meilenstein PREP2 und (natürlich) der Sprache C#.
Ziel des Tages
Ihr habt eine Idee, wie euer Text-Adventure im Meilenstein PREP2 aussehen soll, und kennt die nächsten Schritte.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
14:00 - 14:15:
Vorstellung der Aufgabenstellung in Meilenstein PREP2
-
14:15 - 16:45:
Übung: Wir designen ein Text-Adventure
- In dieser Übung designen wir ein kleines Stück Software - ein Text-Adventure. In dieser Übung besprechen wir, welche Schritte dafür sinnvoll sind und wie man sich so einer Aufgabe nähern kann.
- Nach einem kurzen Inhaltsimpuls geht ihr in Kleingruppen in "virtuelle Besprechungsräume"
- zwischendurch treffen wir uns wieder hier und vergleichen die Ergebnisse
-
16:45 - 17:00:
Offene Fragen zu Meilenstein PREP1
- Offene Fragen oder Probleme
- Diskussion kontroverser Fragen
Aufgabe bis zum nächsten Workshop
Nach dem Workshop bearbeiten Sie bitte
Meilenstein PREP2.
Tue 08.11.2022, 15:00 - 16:30: Domain-Modelling und Live-Beispiel-Coding
Für eine gegebene (einfache) Aufgabenstellung führen wir vor, wie man die ersten Schritte macht. Dazu gehören a) Domänenmodell und b) die erste Klassenstruktur.
Ziel des Tages
Ihr wisst, wie ihr euch der Aufgabenstellung im Meilenstein AC1 oder AC1a nähern könnt.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Agenda
-
15:00 - 15:30:
Übung: Implementierung einer "digitalen Klausur"
- Aus einem einfachen Anforderungstext wird eine Klassenstruktur definiert und in Code überführt.
- Ihr diskutiert die Aufgabenstellung in Kleingruppen in den "virtuellen Konferenzräumen" und erstellt nach Textanalyse ein Domänenmodell
-
15:30 - 16:30:
Live-Modelling & -Coding
- Wir demonstrieren das Modellierung und die ersten Coding-Schritte live
- Siehe Mitschnitt (Passwort ist euch bekannt)
-
- :
Einführung in Meilensteine AC1a und AC1
- Aus Zeitgründen wurde die Einführung in Meilensteine AC1a und AC1 als Videoaufzeichnung nachgereicht
- Siehe Aufzeichnung (Passwort wie sonst auch)
Tue 15.11.2022, 15:00 - 16:15: Unterschied Entity / Value Object und Einstieg in unseren Meilenstein
Wir schauen uns die "Building Blocks" für Softwaresysteme an - Entities und Value Objects. Das wenden wir auf unsere Aufgabenstellung in AC1a und AC1 an.
Ziel des Tages
Domänenmodell für AC1 oder AC1a liegt vor.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:30:
Unterschied Entity / Value Object
-
15:30 - 16:15:
Domain Model (mit Entities und Value Objects) für die Roboterschwärme
- Diskutiert das in kleinen Gruppen in Breakout-Rooms
- ... dann kommen wir in der großen Runde zusammen und besprechen das Ergebnis
Tue 22.11.2022, 15:00 - 16:15: Clean Code
Wir blicken auf die Zusammenfassung unseres ersten größeren Code-Reviews. Daraus abgeleitet motivieren wir die weiteren Themen im SoftwareLab. Im zweiten Teil des Workshops beschäftigen wir uns mit den Regeln des "Clean Code".
Ziel des Tages
Ihr wisst, welche Themen noch kommen, und könnt die Regeln des "Clean Code" anwenden.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:30:
Rückblick auf das Code Review des Text Adventures
- Auswertung der gefundenen Phänomene
- (Link zu den Folien folgt)
-
15:30 - 15:45:
Motivation für Clean Code
- Hier ist ein kleines Code-Beispiel. Diskutiert das bitte kurz (5 min). Worum könnte es hier gehen? Führt den Code bitte nicht aus, sondern schaut ihn euch nur an.
- ... dann kommen wir in der großen Runde zusammen und besprechen das Ergebnis.
-
15:45 - 16:15:
Was ist Clean Code
- Inhaltsimpuls zu Clean Code
- Folien gibts hier.
Tue 29.11.2022, 15:00 - 16:30: Schichtenmodell und Persistenz
Wir setzen uns mit gängigen Schichtenmodellen im Softwaredesign auseinander und zeigen in einem Live-Beispiel, wie die Umsetzung von Persistierung mittels EF Core Framework im Code-First-Ansatz funktioniert.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Agenda
-
15:00 - 15:45:
Gängige Schichtenmodelle und ihr Sinn
- Warum Schichten?
- Welcher Sinn steckt im DDD hinter den einzelnen Schichten?
- Folien gibts hier.
-
15:45 - 16:30:
EF Core Framework am praktischen Beispiel
- An einem praktischen Beispiel wird die Verwendung von EF Core zur Persistierung von Entities und ihren Beziehungen untereinander durchgespielt.
- Dazu gibt es den Beispiel-Code in einem Repo.
Tue 06.12.2022, 15:00 - 16:15: SOLID
In diesem Workshop schauen wir uns die SOLID-Prinzipien genauer an - elementare Prinzipien für gut wartbaren Code und eine übersichtliche Architektur.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:45:
Einführung SOLID, SRP und Open-Closed
- Wofür steht SOLID?
- Welche Prinzipien sind am wichtigsten?
- Inhaltsimpulse zu SRP (Single Responsibility Principle, auf deutsch "Trennung von Zuständigkeiten") und OCP (Open-Closed Principle)
- Folien gibts hier.
-
15:45 - 16:00:
In Kleingruppen - findet jeweils gute & schlechte Beispiele für SRP und OCP in eurem eigenen Code
- ... in Zoom-Breakout-Rooms (jeweils zu zweit oder zu dritt)
- Danach dann kurze Vorstellung in der Runde
-
16:00 - 16:30:
Einführung Dependency-Inversion Principle
- Was ist das Dependency-Inversion Principle?
- Was kann man damit tun?
Tue 20.12.2022, 15:00 - 16:15: Domain Primitives
Domain Primitives sind eine Möglichkeit, durch Kapselung von Basisfunktionalität den eigenen Code modularer zu machen.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:30:
Einführung - was sind Domain Primitives?
- Inhaltsimpuls zur Motivation und Erklärung
- Hier gibt es die Folien dazu.
-
15:30 - 16:00:
Live Coding - wie wirken sich Domain Primitives im Code aus?
Tue 03.01.2023, 15:00 - 16:15: Was sind Aggregates? Und wofür braucht man die?
Aggregates sind Cluster von fachlich eng zusammenhängenden Klassen. Mit Hilfe von Aggregates kann man sinnvolle Modul- / Package-Strukturen definieren. Sie sind auch ein direkter Startpunkt für REST-APIs.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:45:
Was sind Aggregates?
- Inhaltsimpuls zur Motivation und Erklärung
- Hier gibt es die Folien dazu.
-
15:45 - 16:15:
Übung: Aggregates bestimmen (am Beispiel eines Campus-Management-Systems CAMS)
- In dieser Übung geht es darum, Aggregates zu identifizieren. Dazu nutzen Sie die aus Videos bekannte Checkliste.
- Geht in Gruppen in Zoom-Breakout-Räume
- Diskutiert die Aufgabe miteinander
- anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse
Tue 10.01.2023, 15:00 - 16:15: EF Core 6 - zweiter Teil
In diesem Workshop stellen wir die Feinheiten der Benutzung von EF Core im Detail vor.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Agenda
-
15:00 - 15:30:
Vorschläge für EFCore-Konventionen
- Inhaltsimpuls zu Grundlagen und Konventionen
- Hier gibt es die Folien dazu.
-
15:30 - 16:00:
Live Coding
Tue 17.01.2023, 15:00 - 16:15: REST-Prinzipien
In diesem Workshop geht es um die Prinzipien hinter REST. REST ist ein Architekturstil, kein Protokoll! Es definiert sich durch bestimmte grundlegende Regeln.
Videoaufzeichnung
Eine Videoaufzeichnung gibt es
hier.
Passwort ist bekannt.
Schauen Sie bitte vorab nachfolgende Videos
Agenda
-
15:00 - 15:45:
Prinzipien von REST
- Inhaltsimpuls zu Grundlagen und Konventionen
- Hier gibt es die Folien dazu.
-
15:45 - 16:30:
Übung: REST-API spezifizieren (am Beispiel eines Campus-Management-Systems CAMS)
- In dieser Übung geht es darum, für die in einer vorangegangenen Übung gefundenen Aggregates jeweils ein REST-API zu spezifizieren.
- Geht in kleinen Gruppen in einen Breakout-Room von Zoom
- Diskutiert die Aufgabe miteinander und entwerft das API.
- Anschließend treffen wir uns wieder hier und vergleichen die Ergebnisse
Tue 24.01.2023, 15:00 - 16:15: REST-Implementierung
tbd.
Schauen Sie bitte vorab nachfolgende Videos
Sprint-Meilensteine
Das Softwarelab gliedert sich in die folgenden Sprint-Meilensteine.
PREP1: Basisverständnis von Kontrollfluss und Datenstrukturen in C#
In diesem Meilenstein beschäftigt ihr euch mit Kontrollfluss und Datenstrukturen in C#. Anhand einfacher, kleiner Programmieraufgaben werdet ihr durch die wesentlichen Aspekte des Codings in C# hindurchgeführt.
Der Meilenstein wird
komplett automatisch (per Unit-Tests) überprüft.
-
Ausgabe: Mon 12.09.2022,
13:00
-
Fertigstellung bis:
Fri 23.09.2022,
18:00
Zugehörige Videos
PREP2: Objektorientierte Programmierung in C#
Mit der objektorientierte Programmierung in C# setzen wir uns anhand einer kleinen, zusammenhängenden Programmieraufgabe (einem Textadventure) auseinander. Dabei braucht ihr objektorientiertes Denken - Klassen, Members, Methoden und Namespaces zur Strukturierung des Codes. Auch Unit Tests und Exceptions zur Validierung spielen eine Rolle.
Der Meilenstein wird
-
Ausgabe: Mon 26.09.2022,
13:00
-
Fertigstellung bis:
Fri 07.10.2022,
18:00
Zugehörige Videos
AC1: Domain-Driven Design zur Strukturierung von Softwaresystemen
In diesem Meilenstein lernt ihr die Grundlagen von DDD (Entities, Value Objects, Repositories) kennen. Die Umsetzung macht ihr mittels C# und ASP.NET.
Der Meilenstein wird
teils automatisch (per Unit-Tests) überprüft, teils gibt es manuelles Feedback.
-
Ausgabe: Mon 24.10.2022,
13:00
-
Fertigstellung bis:
Fri 04.11.2022,
18:00
Zugehörige Videos
AC2: Clean Code, SOLID-Prinzipien und Domain Primitives
Wir beschäftigen uns mit den Grundlagen guten Codes: Dabei helfen die wichtigsten Clean-Code-Regeln ebenso wie die SOLID-Prinzipien als Regeln zu Strukturierung komplexer Software. Zusätzlich führen wir Domain Primitives zur Kapselung von Basisfunktionalität ein.
Der Meilenstein wird
teils automatisch (per Unit-Tests) überprüft, teils gibt es manuelles Feedback.
-
Ausgabe: Mon 07.11.2022,
13:00
-
Fertigstellung bis:
Fri 18.11.2022,
18:00
Zugehörige Videos
AC3: Package-Strukturen basierend auf Aggregates
In diesem Meilenstein geht um die Grundlagen von Software-Schichtenmodellen. Wir schauen uns den Unterschied zwischen horizontalem und vertikalem Softwareschnitt an. Das Ganze setzt ihr praktisch um anhand des DDD-Konzepts „Aggregate“.
Der Meilenstein wird
teils automatisch (per Unit-Tests) überprüft, teils gibt es manuelles Feedback.
-
Ausgabe: Mon 21.11.2022,
13:00
-
Fertigstellung bis:
Fri 02.12.2022,
18:00
Zugehörige Videos
AC4: REST-APIs
Wir schauen uns an, wie man das "Exposing" von Funktionalität über REST-Schnittstellen umsetzen kann. Ihr lernt Design-Guidelines für REST kennen und designed die REST-APIs auf der Basis von Aggregates.
Der Meilenstein wird
teils automatisch (per Unit-Tests) überprüft, teils gibt es manuelles Feedback.
-
Ausgabe: Mon 05.12.2022,
13:00
-
Fertigstellung bis:
Fri 16.12.2022,
18:00
Zugehörige Videos