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:
- Clean Code (Schimmel)
- Application Design (Bente)
- Agile Team Coding (Schimmel)
- 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