Kontakt
stefan.bente[at]th-koeln.de
+49 2261 8196 6367
Discord Server
Prof. Bente Personal Zoom
Adresse
Steinmüllerallee 4
51643 Gummersbach
Gebäude LC4
Raum 1708 (Wegbeschreibung)
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), SS23

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
03.04.2023 - 14.04.2023. 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).
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28)
Videokonferenz-Link: https://th-koeln.zoom.us/j/67099191709?pwd=Z2RyU2wwNTkxMmJuWkM2TU92cGtOdz09 (nur in Ausnahmefällen und wenn explizit vorher für den Tag kommuniziert)
ILIAS/ILU-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/ILU-Kurs. Die Deadline ist 03.04.2023.
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. (Achtung, wir sind auf einen neuen Gitlab-Server umgezogen. Wenn Sie die Veranstaltung vor einiger Zeit absolviert haben, müssen Sie sich erneut einloggen.)
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. Die entsprechenden Kanäle zur Veranstaltung werden anschließend für Sie freigeschaltet.
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.)
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 90 Punkte. Alle Aspekte werden am Ende dieses Kurses bewertet. Die Punkte für Funktionalität korrekt umgesetzt (69) ermitteln sich aus der Anzahl der “grünen” Tests auf der individuellen Testseite. Je 3 Punkte pro Test.

Aspekt Max. Punkte Möglicher Bonus Kriterien
Funktionalität korrekt umgesetzt 69 30 - geforderte Funktionalität umgesetzt - Tests sind grün
- Bonus bei zusätzlicher sinnvoller Funktionalität
DDD-Konzepte 11   - Packages, Services und sonstige Bausteine entsprechend umgesetzt
- Domain Model sinnvoll
Domain Primitives 10   - Domain Primitives existieren, wo sinnvoll
SOLID 10   - Business-Logik ist, wo möglich, in Entities, nicht in Services
- SOLID-Prinzipien sind eingehalten
Teil-Summe Code-Review 100    
**Gesamt ** 130 30  

Workshops

Mon 03.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

Ziel des Tages

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

Videoaufzeichnung

Eine Videoaufzeichnung gibt es hier. (Passwort: 8z@r5n?*).

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 Untergruppen
    • 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 Untergruppen
    • 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 04.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

Ziel des Tages

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

Videoaufzeichnung

Eine Videoaufzeichnung gibt es hier. (Passwort: U2&$fePw).

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.
  • 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 Untergruppen
  • 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.
  • 15:15 - 16:00:  Wrapup
    • Versuch der weiteren Umsetzung in den Untergruppen
    • 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 05.04.2023, 10:00 - 16:00: Selbstlerntag

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

Thu 06.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

Ziel des Tages

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

Videoaufzeichnung

Eine Videoaufzeichnung gibt es hier. (Passwort: N*J&Ldw4).

Schauen Sie bitte vorab nachfolgende Videos

Agenda

  • 10:00 - 10:30:  Feedback
    • Feedback zum bisherigen Vorankommen und Blockern
  • 10:30 - 12:30:  Weiter coden
    • Ich berate in den Untergruppen
  • 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 Untergruppen
    • Zum Abschluss nochmal alle im Plenum

Aufgabe bis zum nächsten Workshop

  • Ist Ihre Liste von Domain Primitives komplett?

Tue 11.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

Ziel des Tages

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

Videoaufzeichnung

Eine Videoaufzeichnung gibt es hier. (Passwort: 1+t=hi%V).

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 12.04.2023, 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 13.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

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 Untergruppen
    • 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 Untergruppen
    • 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 14.04.2023, 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.

Ort des Workshops

Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28).

Ziel des Tages

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

Schauen Sie bitte vorab nachfolgende Videos