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.

Application Design (AD), SS22

Application Design (AD) beschäftigt sich mit Patterns und Architekturstilen, um größere und verteilte Softwaresysteme bauen zu können. Besonderes Augenmerk liegt auf den Konzepten des Domain-Driven-Design (DDD). Der Kurs wird im Block in Form von Workshops durchgeführt, bei denen wir inhaltlich diskutieren und Sie an einer durchgehenden Programmieraufgabe arbeiten. Jede:r Teilnehmer:in bekommt ein individuelles Repo, in dem die Aufgabenstellung beschrieben ist.

Studiengang und Modulbeschreibung
Code & Context (Bachelor) (siehe auch Modulbeschreibung auf der Studiengangs-Seite)
Zeitraum und zeitliche Organisation der Veranstaltung
11.04.2022 - 22.04.2022. Organisiert als Blockkurs mit definierten Präsenzzeiten. Siehe unten für die genauen Daten.
Ort der Veranstaltung
Die Veranstaltung findet in einem Hybrid-Format statt. Bitte schauen Sie bei dem jeweiligen Zeitschlitz oder Workshoptag nach (siehe unten auf dieser Seite), ob dieser online oder in Präsenz stattfindet. Falls auf dieser Seite keine Angaben sind, prüfen Sie bitte die sonstige Kommunikation (z.B. Discord).
Videokonferenz-Link: https://th-koeln.zoom.us/j/89942479715?pwd=UWZtQ25MZjBobXh6UWJyTVN4TjFOZz09
ILIAS-Kurs zur Veranstaltung
https://ilias.th-koeln.de/ilias.php?ref_id=1923299&cmdClass=ilrepositorygui&cmdNode=wc&baseClass=ilrepositorygui
Anmeldung zur Veranstaltung
Bitte werden Sie Mitglied in diesem ILIAS-Kurs. Die Anmeldung ist möglich bis zum 11.04.2022.
Git-Repo für die durchgehende Programmieraufgabe in der Verstanstaltung
https://git.archi-lab.io/ . Bitte loggen Sie sich unbedingt vorab einmal mit Ihrer campusId dort ein. Sonst kann das Repo Ihnen nicht automatisch zugewiesen werden.
Miro Board für Gruppenarbeiten, Notizen und Modellieren während des Kurses
Im Kurs können Sie dieses Board nutzen.
Discord-Server für schnelle Kommunikation
Discord hat sich als sehr effektive Plattform für den Informationsaustausch, Diskussionen und Fragen an Lehrende/Betreuer:innen erwiesen. Deshalb sollten Sie dem ArchiLab-Discord-Server beitreten unter https://discord.gg/YYNYb5whU8. Navigieren Sie zum Channel #rollenzuweisung und klicken Sie auf coco. Dann sieht man die entsprechenden Kanäle für diese Veranstaltung.
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.
Script
Für diese Veranstaltung ist ein Script verfügbar (in den Videos verwendete Folien als PDF, mit abschnittsweisen Links auf das entsprechende Video).

Learning Outcome

Als Software-Entwickler:in kann ich effizient und nachhaltig Softwareapplikationen erstellen,

indem ich ...

  • in einer bewussten, kriteriengestützten Entscheidung das beste Werkzeug (Sprache, Tool, Methode, Framework) für die aktuelle Aufgabe auswähle,
  • bekannte Paradigmen, Technologien, Patterns und Architekturstile für den Entwurf und die Umsetzung eines Softwaresystems nutze,
  • diese problembezogen und pragmatisch anzupasse,,

damit ich digitale Produkte mit hohem Softwareanteil schnell und mit Blick auf spätere Weiterentwicklung herstellen kann.

Übergreifende Aufgabenstellung im Modul “Coding Software 2”

Application Design ist Teil des Gesamtmoduls “Coding Software 2”, das sich aus insgesamt vier Kursen zusammensetzt:

  1. Clean Code (Schimmel)
  2. Application Design (Bente)
  3. Agile Team Coding (Schimmel)
  4. DevOps (Wörzberger)

Die hier eingeführte Aufgabenstellung werden Sie in den nachfolgenden Kursen (3) und (4) weiter bearbeiten. Damit wird dann eine zusammenhängende Software im Modul entstehen.

Allerdings werden Sie nicht immer im gleichen Repo arbeiten. In diesem Kurs Application Design bekommt jede:r von Ihnen ein individuelles Repo und muss eine eigene Lösung erstellen. Sie sollen ausdrücklich diskutieren und zusammenarbeiten, aber plumpes Copy/Paste (mit Ändern der Individualisierung) ist nicht erlaubt. In den nachfolgenden Kursen arbeiten Sie dann voraussichtlich in Teilteams weiter, mit einem Repo pro Teilteam. Sie können sich dann im Team einigen, auf welcher Lösung Sie die weitere Arbeit aufbauen (oder ob Sie die individuellen Repos kombinieren).

Bewertung

Es sind insgesamt 100 Punkte in diesem Kurs zu erreichen, plus 20 Bonuspunkte. Bestanden ist ab 30 Punkte, eine 1,0 gibt es ab 80 Punkte.

Alle Aspekte (bis auf Funktionalität korrekt umgesetzt) werden am Ende des Moduls, nicht dieses Kurses, bewertet. Sie brauchen sich also keinen übertriebenen Stress zu machen, wenn Sie in den zwei Wochen nicht alle geforderte Funktionalität umsetzen können.

Teil Aspekt Max. Punkte Möglicher Bonus Kontrolliert am Modulende (Mai), außer … Kriterien
Dokumentation Domain Model 10     - Domain Model als Diagramm ist verständlich und umfassend
- Entities und Value Objects und deren Beziehungen richtig gewählt
- Dokumentation gut verständlich
  Domain Primitives 10     - Domänenspezifische Basistypen sind als Domain Primitives umgesetzt
- Es ist pro DP-Klasse kurz begründet, warum welche Funktionalität dorthin verlagert wurde
  SOLID 10     - kurze schriftliche Begründung: Wo im Code waren welche SOLID-Prinzipien wichtig?
  Teil-Summe Dokumentation 30      
Code-Review Funktionalität korrekt umgesetzt 30 20 Ende des Kurses (22.04.) - geforderte Funktionalität umgesetzt - Tests sind grün
  DDD-Konzepte 15     - korrekt umgesetzt
- entsprechen dem Domain Model
  Domain Primitives 10     - Domain Primitives existieren, wo sinnvoll
  SOLID 15     - Business-Logik ist, wo möglich, in Entities, nicht in Services
- SOLID-Prinzipien sind eingehalten
- Zykel korrekt aufgelöst
  Teil-Summe Code-Review 70      
  **Gesamt ** 100 20    

Die Punkte für Funktionalität korrekt umgesetzt (30 + 20 Bonus) ermitteln sich aus der Anzahl der “grünen” Tests auf der individuellen Testseite:

Testtyp Anzahl Punkte pro grünem Test Gesamt
E1BasicTests 5 2 10
E1MovementTests 6 3 18
E1ValidationTests 8 2 16
Exercise1HiddenTests 2 3 6
Summe     50

Workshops

Mon 11.04.2022, 10:00 - 16:00: Kickoff & Domain Model

In diesem ersten Blocktag starten wir in die Veranstaltung, klären Organisatorisches, schauen die Programmieraufgabe an und beschäftigen und mit Domain Models.

Ziel des Tages

Sie wissen, was in den zwei Wochen auf Sie zukommt, und haben Ihr Domain Model (halbwegs) fertig.

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 10:30:  Organisatorisches
    • Zeitplan und Struktur der ersten und zweiten Woche (Workshops, Übungen, Videos)
    • Youtube-Channel
    • Discord als präferiertes Kommunikationsforum
    • Benotung
  • 10:30 - 11:00:  Programmieraufgabe
    • Loggen Sie sich in Gitlab ein (siehe Link oben auf der Seite)
    • Clonen Sie Ihr persönliches Repo (siehe Video zur Gitlab-Infrastruktur)
    • Lesen Sie sich die Aufgabenstellung durch, sammeln Sie Fragen
    • anschließend treffen wir uns wieder hier und besprechen die Unklarheiten
  • 11:00 - 11:45:  Domain Model
    • Schauen Sie sich die Videos zum Domain Model an (Einführung DDD und fachliches Datenmodell)
    • Was ist unklar? Sammeln Sie Fragen.
  • 11:45 - 12:30:  Erste Version Domain Model (= fachliches Datenmodell)
    • Gehen Sie in Breakout Rooms
    • Diskutieren Sie, welche Geschäftsobjekte in der Aufgabenstellung bei Ihnen auftauchen, und wie ein Domain Model aussehen könnte.
    • Nutzen Sie das Miro-Board (Link oben auf der Seite)
  • 12:30 - 13:30:  Mittagspause
  • 13:30 - 15:30:  Entities
    • Schauen Sie sich das Video zu den Entities und Value Objects an, sowie die Videos zur Umsetzung mit JPA
    • Gehen Sie in Breakout Rooms
    • Besprechen Sie sich, womit Sie bei dieser Aufgabe am besten anfangen. Suchen Sie sich ein Entity aus, und wählen Sie die passende Interface-Methode zum Implementieren.
  • 15:30 - 16:00:  Wrapup
    • Wie hat es bis jetzt geklappt?
    • Was war gut, was ist unklar?

Aufgabe bis zum nächsten Workshop

  • Überlegen Sie, wie Sie das Domain Model dokumentieren
  • Sammeln Sie Fragen zum Stoff
  • Arbeiten Sie noch ein bisschen weiter an Ihrem Code
  • Schauen Sie schon mal die Videos weiter

Tue 12.04.2022, 10:00 - 16:00: Domain und Application Layer

In diesem zweiten Blocktag beschäftigen wir uns mit einem Schichtenmodell für Software, und bauen dies in die eigene Software ein. Darüber hinaus setzen Sie sich mit Beziehungsrichtungen auseinander.

Ziel des Tages

Sie haben eine tragfähige Struktur in Ihrem Programm, und sind ein Stück mit der Programmierung weiter.

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 11:00:  Zeit, um Videos zu schauen und sich zu organisieren
  • 11:00 - 11:45:  (DDD-)Schichtenmodell in der Softwareentwicklung
    • Software wird üblicherweise in "Schichten" entwickelt. Mindestens gibt es die Trennung zwischen "Client" und "Server". Ein häufig benutztes Modell ist das 3-Schichten-Modell (UI/Client - Logik - Daten).
    • Ein moderneres, viel benutztes Schichtenmodell ist das DDD-4-Schichten-Modell - (1) UI (Presentation Layer), (2) Application Layer (APIs, Kommunikation Außenwelt), (3) Domain Layer (die eigentliche Business-Logik und die Daten, im wesentlichen Technologie-agnostisch), und (4) Infrastructure Layer (Basis-Technologien, so wie Datenbanken, Spring, ...)
    • Ich gebe einen kurzen Inhaltsimpuls, wie die Schichtenmodelle sich entwickelt haben, welche Vorteile das 4-Schichten-Modell nach DDD hat, und wie man das im Code abbilden kann.
    • zum Nachbereiten siehe Link zum Zoom-Mitschnitt, Passwort=YRhr9S!5
    • ... und die Folien dazu auf ILIAS
  • 11:45 - 14:30:  Eigene Umsetzung (dazwischen Mittagspause)
    • Schauen Sie sich das Video zu den Entities und Value Objects an, sowie die Videos zur Umsetzung mit JPA, insbesondere auch den Beziehungen
    • Gehen Sie in Breakout Rooms
  • 14:30 - 15:15:  Wo und wie fängt man an mit dem Coden?
    • Wir wählen uns einen der vorgegeben Tests zum Implementieren aus, und ich code mal live, wie man diesen einfachen Test "grün" bekommt.
    • zum Nachbereiten siehe Link zum Zoom-Mitschnitt, Passwort=YRhr9S!5
  • 15:15 - 16:00:  Wrapup
    • Versuch der weiteren Umsetzung in den Breakout Rooms
    • Dann Abschlussrunde - Wie hat es bis jetzt geklappt? Was war gut, was ist unklar?

Aufgabe bis zum nächsten Workshop

  • Aktualisieren Sie das Domain Model

Wed 13.04.2022, 10:00 - 16:00: Selbstlerntag

Nutzen Sie diesen Tag, um sich weiter mit Inhalten und mit Ihrem Code zu beschäftigen.

Thu 14.04.2022, 10:00 - 16:00: Domain Primitives

In der Aufgabenstellung gibt es mehrere Stellen, an denen Domain Primitives sehr sinnvoll sind. Damit können Sie Basis-Funktionalität verkapseln und wiederverwenden.

Ziel des Tages

Sie können mit den Begriffen der Schichtenarchitektur gemäß DDD und Domain Primitives etwas anfangen.

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 10:30:  Feedback
    • Feedback zum bisherigen Vorankommen und Blockern auf Tweedback
  • 10:30 - 12:30:  Weiter coden
    • Ich berate in den Breakout Rooms
  • 12:30 - 13:30:  Mittagspause
  • 13:30 - 15:00:  Domain Primitives
    • Schauen Sie das Video dazu
    • Kurze Diskussion - welche Domain Primitives gibt es hier?
  • 15:00 - 16:00:  Weiter coden
    • Ich berate in den Breakout Rooms
    • Zum Abschluss nochmal alle im Plenum

Aufgabe bis zum nächsten Workshop

  • Ist Ihre Liste von Domain Primitives komplett?

Tue 19.04.2022, 10:00 - 16:00: Catch up with Coding

Arbeiten Sie ohne direkten weiteren Input an Ihrem Code. Ich werde durch die Breakout-Räume zirkulieren und Fragen beantworten. Wenn es sinnvoll erscheint, machen wir noch eine Live-Coding-Session.

Ziel des Tages

Sie sind mit Ihrem Code ein Stück weiter, und wissen, was Sie als nächstes tun möchten.

Aufgabe bis zum nächsten Workshop

  • Schauen Sie Ihren eigenen Code an. Wo sind Sie zufrieden, und wo nicht so sehr? Ist es guter Code?
  • Schauen Sie sich die beiden für Mittwoch genannten Videos zu SOLID an. Ist das "Single Responsibility Principle" in Ihrem Code erfüllt?

Wed 20.04.2022, 10:00 - 16:00: Selbstlerntag

Nutzen Sie diesen Tag, um sich zwei Videos zum Thema "SOLID" anzuschauen (zusammen unter 30 min Spieldauer)

Schauen Sie bitte vorab nachfolgende Videos

Thu 21.04.2022, 10:00 - 16:00: SOLID Principles

Wir führen die SOLID Principles als Satz von umfassend akzeptierten Architektur-Prinzipien ein. Sie wenden das auf Ihren eigenen Code an, insbesondere das "Single Responsibility Principle" (SRP) und das Das "Dependency Inversion Principle" (DIP). SRP bedeutet, dass jede Klasse, jedes Package, jedes Interface genau einen Zweck haben soll. Dadurch wird der Code verständlicher und muss seltener verändert werden. DIP beschreibt u.a. einen Weg, Zykel und Abhängigkeiten in der Software zu vermeiden. Wir analysieren, wo dies in Ihrem Code der Fall sein könnte.

Ziel des Tages

Ihre Klassen und Packages haben eine sinnvolle und klar verständliche Struktur. Business Logic ist da, wo sie hingehört.

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 13:30:  Coding und Beratung
    • Sie machen an Ihrem Code allein oder in Kleingruppen weiter
    • Ich berate in den Breakout Rooms
    • Darin Mittagspause
  • 13:30 - 14:30:  SOLID-Prinzipien
    • Videos schauen, wenn noch nicht geschehen (SOLID Übersichtsvideo, SRP, DIP)
    • Danach Fragen und Diskussion
  • 14:30 - 16:00:  Anwendung der SOLID-Prinzipien auf den eigenen Code
    • Sie schauen den eigenen Code kritisch an, wo ein Refactoring gemäß der SOLID-Prinzipien nötig ist
    • Ich berate in den Breakout Rooms
    • Zum Abschluss nochmal alle im Plenum

Aufgabe bis zum nächsten Workshop

  • Dokumentieren Sie, wo Sie die SOLID Principles in welcher Weise im eigenen Code nutzen.
  • Welche Prinzipien sind relevant für Sie, welche weniger?

Fri 22.04.2022, 10:00 - 16:00: Wrapup und Zwischenfazit

An diesem letzten Kurstag machen wir ein Zwischenfazit zu den Designaspekten Ihrer Software. Was funktioniert, was ist immer noch unklar und/oder fühlt sich seltsam an? Darüber hinaus machen wir noch einmal ein Recap der universellen Clean-Code-Regeln.

Ziel des Tages

Sie wissen, wo Sie mit Ihrem eigenen Code stehen - seine Stärken und Schwächen :-).

Schauen Sie bitte vorab nachfolgende Videos