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.
#rollenzuweisung
und klicken Sie auf
coco.
Die entsprechenden Kanäle zur Veranstaltung werden anschließend für Sie freigeschaltet.
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.
Application Design ist Teil des Gesamtmoduls “Coding Software 2”, das sich aus insgesamt vier Kursen zusammensetzt:
Dieser Kurs baut explizit auf den Inhalten des Kurses “Clean Code” auf, und führt diese weiter. Sie beschäftigen sich damit, ein größeres Backend für eine Anwendung zu entwickeln. Dabei arbeiten Sie nach modernen Prinzipien des Software-Designs, insbesondere des Domain-Driven-Designs (DDD), wie es aktueller Stand in der Industrie ist.
Wir implementieren ein Backend für eine eCommerce-Plattform. Die Anforderungen sind in Ihrem Repo beschrieben. In diesem Kurs Application Design bekommt jede:r von Ihnen ein individuelles Git-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 (siehe auch unten). Die Aufgabenstellung ist in Ihrem Repo beschrieben, das Sie zu Beginn des Kurses zugewiesen bekommen.
Ihr Repo enthält auch Tests, die Ihre Lösung erfüllen muss. Die Tests gliedern sich in folgende Teile:
Diese Tests sind grün, wenn Ihre Lösung korrekt ist. Sie können beliebig oft pushen, um die Tests zu erfüllen. Die Bewertung erfolgt am Ende des Kurses auf Basis der Anzahl der grünen Tests, sowie der aktiven Beteiligung am Kurs.
Die Bearbeitung der Kurs-Inhalte und die Bewertung erfolgt auf der Basis einer durchlaufenden Programmieraufgabe, für die jede:r von Ihnen ein individuelles Git-Repo bekommt. Für den Umgang mit dieser Aufgabe, aber auch für den Umgang mit Ihren Kommilitonen und mit uns als Betreuern gelten die nachfolgenden Regeln. Bitte lesen Sie diese sorgfältig durch und halten Sie sich daran.
Die Veranstaltung ist als Präsenzveranstaltung konzipiert, und lebt davon, dass während der gemeinsamen Zeit in der Schanzenstraße eine Menge Diskussionen stattfinden - nicht nur zwischen Betreuern und Studierenden, sondern auch mit den Studierenden untereinander. Man trifft sich, um gemeinsam an der Programmieraufgabe zu arbeiten, um Fragen zu diskutieren, um sich gegenseitig zu helfen und um sich auszutauschen. Dazwischen gibt es moderierte Diskussionen (z.B. Retrospektiven, Übungen, …) und Inhaltsimpulse (Folien, Live-Coding, …) durch die Betreuer.

Wir erwarten daher, dass Sie an den Präsenztagen anwesend sind. Sollten Sie einmal verhindert sein, dann bitten wir darum, eine kurze Nachricht zu schreiben. Die aktive Teilnahme (in Form von Diskussionsbeträgen, Helfen von Kommilitonen, Fragen stellen, …) ist ein wichtiger Bestandteil der Veranstaltung und wird auch bewertet (siehe Benotung).
Einige Inhaltsimpulse, insbesondere Live-Coding, werden wir versuchen aufzuzeichnen und dann zur Verfügung zu stellen, damit man sich das noch einmal in Ruhe anschauen kann. Es ist aber ausdrücklich keine Hybrid-Veranstaltung, in der jeder Impuls und jede Diskussion auch remote zugänglich ist.
Jede*r Teilnehmer*in muss eine eigenständige Bearbeitung der Praktikumsaufgabe durchführen. Wir ermutigen Sie ausdrücklich, Ihre Lösungen in Arbeitsgruppen zu diskutieren. Ein einfaches Copy-Paste von Lösungen (unter Anpassung der Personalisierung) werten wir aber als Täuschungsversuch.

Wir haben die Möglichkeit, die Lösungen automatisiert zu vergleichen und “merkwürdige” Ähnlichkeiten zu erkennen. Das Tooling vergleicht Repos paarweise und deckt Code-Ähnlichkeiten mit großer Zuverlässigkeit auf. Ein solches Kopieren von Lösungen ist ein Betrugsversuch und zieht entsprechende Konsequenzen nach sich (Bewertung mit 5,0 und Übergabe an den Prüfungsausschuss). Das gilt sowohl für “Kopierer:in” wie auch für “Urheber:in” einer solchen Lösung. Wer seine Lösung weitergibt, riskiert also ebenfalls die Wertung der Veranstaltung als Täuschungsversuch.
Wir möchten ausdrücklich, dass Sie über Lösungen diskutieren und diese auch gern gemeinsam erarbeiten. Das Folgende ist also ok:
In diesem Fall gibt unser Tooling keinen Match aus, weil Code schreiben so individuell wie Handschrift ist. Ähnliche Klassenstrukturen sind ok, die werden nicht als Match gewertet, wenn der Code erkennbar einzeln geschrieben wurde.
So etwas findet unser Tooling.
Wir behalten uns vor, die Daten Ihrer Commits in dieses Repo zur Lernstandskontrolle sowie - in anonymisierter Form - für die Beforschung der eigenen Lehre (SoTL, Scholarship of Teaching and Learning) und bei der (Weiter-)Entwicklung von Lehrunterstützungs-Tools zu verwenden.
| Notenbestandteil | Gewicht | 0 Punkte | 1 Punkt | 2 Punkte | 3 Punkte |
|---|---|---|---|---|---|
| Funktionaler Umfang | 4 | 0% der entsprechenden Tests grün | 33% der entsprechenden Tests grün | 67% der entsprechenden Tests grün | 100% der entsprechenden Tests grün |
| Domain Primitives | 2 | ||||
| DDD Konventionen | 2 | 0% der entsprechenden Tests grün | 33% der entsprechenden Tests grün, und mindestens 0,75 Punkte in 'Funktionaler Umfang' (*). | 67% der entsprechenden Tests grün, und mindestens 0,75 Punkte in 'Funktionaler Umfang' (*). | 100% der entsprechenden Tests grün, und mindestens 0,75 Punkte in 'Funktionaler Umfang' (*). |
| Clean-Code-Regeln | 1 | ||||
| SOLID / Zykelfreiheit | 0 | Nicht beide Zykelfreiheits-Tests grün | - | - | Beide Zykelfreiheits-Tests grün, mit Zusatzbedingungen (**). |
| Basistests | - | (müssen alle grün sein, sonst werden 'DDD Konventionen', 'Clean-Code-Regeln' und 'SOLID / Zykelfreiheit' jeweils mit 0 Punkten gewertet.) | |||
| Beteiligung an fachlichen Diskussionen und Interaktionen im Gesamtprojekt | 1 | Der/die Studierende hat sich so gut wie nicht an Interaktionen im Gesamt-Projektteam beteiligt. | Der/die Studierende war unterdurchschnittlich und nur bei wenigen Anlässen an Interaktionen im Gesamt-Projektteam beteiligt. | Der/die Studierende war durchschnittlich stark im Gesamt-Projekt sichtbar (Anleitung anderer, Hilfestellungen, Beiträgen zu fachlichen Diskussionen etc). | Der/die Studierende ist außergewöhnlich stark im Gesamt-Projekt sichtbar gewesen, durch Anleitung anderer, Hilfestellungen, Beiträgen zu fachlichen Diskussionen und ähnlichem. |
Insgesamt sind max. 30 Punkte zu erreichen. Eine 1,0 gibt es ab 27,5 Punkten, eine 4,0 ab 6 Punkten. Notenstufen dazwischen werden entsprechend interpoliert. 0 Punkte bei ‘Funktionaler Umfang’ führen automatisch zu einer 5,0. Alle Aspekte werden individuell bewertet.
(*) Zusatzbedingung für die Gewichtung der Punkte in ‘DDD Konventionen’ und ‘Clean-Code-Regeln’:
(**) Zusatzbedingungen 3 Punkte bei Zykelfreiheit:
testImpactOfStockCorrectionToOneShoppingCart und testImpactOfStockCorrectionToSeveralShoppingCarts grün (Name kann aufgrund Individualisierung variieren)testRemoveProductThatIsInStock und testRemoveProductThatIsInShoppingCartOrOrder grün (Name kann aufgrund Individualisierung variieren)In diesem ersten Blocktag starten wir in die Veranstaltung, klären Organisatorisches, schauen die Programmieraufgabe an und beschäftigen und mit Domain Models.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Sie wissen, was in den zwei Wochen auf Sie zukommt, und haben Ihr Domain Model (halbwegs) fertig.
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.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Sie haben eine tragfähige Struktur in Ihrem Programm, und sind ein Stück mit der Programmierung weiter.
Eine Videoaufzeichnung gibt es hier. (Passwort: M5vfm@=$).
Nutzen Sie diesen Tag, um sich weiter mit Inhalten und mit Ihrem Code zu beschäftigen.
In der Aufgabenstellung gibt es mehrere Stellen, an denen Domain Primitives sehr sinnvoll sind. Damit können Sie Basis-Funktionalität verkapseln und wiederverwenden.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Sie können mit den Begriffen der Schichtenarchitektur gemäß DDD und Domain Primitives etwas anfangen.
Den Freitag nutzen wir für Fragen zu offenen Punkten, und machen eine Zwischen-Retrospektive.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Fragen sind geklärt, Sie haben keine Blocker in Ihrer Arbeit.
Eine Videoaufzeichnung gibt es hier. (Passwort: x1#VW?V%).
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.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Sie sind mit Ihrem Code ein Stück weiter, und wissen, was Sie als nächstes tun möchten.
Eine Videoaufzeichnung gibt es hier. (Passwort: __8g3xFqB).
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.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Ihre Klassen und Packages haben eine sinnvolle und klar verständliche Struktur. Business Logic ist da, wo sie hingehört.
Nutzen Sie diesen Tag, um sich zwei praktische Coding-Videos zum Thema "SOLID" anzuschauen.
Wir schauen besonders auf die Zykel in Ihrem Code, und versuchen diese aufzulösen.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Ihre Klassen und Packages haben eine zykelfreie Struktur
An diesem letzten Kurstag machen wir ein Fazit zu den Designaspekten Ihrer Software. Was funktioniert, was ist immer noch unklar und/oder fühlt sich seltsam an? Darüber hinaus machen wir eine Abschluss-Retrospektive.
Raum: 423 (Code & Context, Standort Köln Mülheim, Schanzenstr. 28, 4. Stock).
Sie wissen, wo Sie mit Ihrem eigenen Code stehen - seine Stärken und Schwächen :-).