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.st.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 Miro-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 unter https://discord.gg/YYNYb5whU8 beitreten. 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. Die gesamten Inhalte dieser Veranstaltung sind in einer Playlist zusammengefasst.
Script
Für diese Veranstaltung ist ein Script verfügbar (in den Videos verwendete Folien als PDF, mit abschnittsweisen Links auf das entsprechende Video).

Inhalt

Learning Outcome

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

indem ich ...

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 nachfolgende Videos

Agenda

Aufgabe bis zum nächsten Workshop

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 nachfolgende Videos

Agenda

Aufgabe bis zum nächsten Workshop

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 nachfolgende Videos

Agenda

Aufgabe bis zum nächsten Workshop

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

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 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 nachfolgende Videos

Agenda

Aufgabe bis zum nächsten Workshop

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 nachfolgende Videos