Kontakt
Mail: stefan.bente@th-koeln.de
Tel.: +49 2261 8196 6367
Skype: stefan.bente
Discord Server
Adresse:
Steinmüllerallee 4
51643 Gummersbach
Gebäude LC4
Raum 1708
Sprechstunde nach Vereinbarung
Terminanfrage: calendly.com Wenn Sie dieses Tool nicht nutzen wollen, schicken Sie eine Mail und ich weise Ihnen einen Termin zu.

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
Videokonferenz-Link: siehe individuelle Einladung
Raum: Arena (Offener Kreativbereich im Mündelheimer Weg)
Git-Repo für die Übungen
https://gitlab.com/archi-lab/architecture-and-coding/participants. Bitte lassen Sie mir vorab Ihren Gitlab-User-Account zukommen.
Youtube-Kanal
Für diese Veranstaltung sind Lehrvideos auf Youtube verfügbar. Abonnieren Sie dafür am besten den Kanal ArchiLab. Die gesamten Inhalte dieser Veranstaltung sind in einer Playlist zusammengefasst.

Inhalt

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
    • Ziel des Softwarelabs
  • 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
    • Aufgabe
    • Fragen dazu
  • 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 manuell angeschaut und dann gibt es Feedback.

  • 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