Services schneiden ist hart. Eigentlich klingt es einfach, denn wir möchten Qualitäten wie eine lose Kopplung und hohe Kohäsion die uns Services unabhängig entwickeln und deployen lassen. Aber was bedeutet das eigentlich in der Praxis? Wir können Systeme nämlich nur kohäsiv bauen, wenn wir noch zuvor festlegen welche Änderung lokal möglich sein soll. Deshalb müssen wir uns das Geschäftsmodell unserer Firma und die Fachdomäne genau ansehen um zu einem passenden Serviceschnitt zu kommen. Aber auch Qualitätsanforderungen an Datenkonsistenz, User Experience oder Security nehmen einen Einfluss auf unseren Serviceschnitt und fordern uns zu einem trade-off.
In diesem Workshop werden wir anhand eines Beispiels den Serviceschnitt nach strategischen Domain-driven Design prinzipien durchführen. Dabei verwenden wir Techniken wie Event Storming und den Business Model Canvas um zunächst die Fachlichkeit zu durchdringen. Anschließend werden wir mit Heuristiken wie Domain Flow Patterns verschiedene Schnittmöglichkeiten herausarbeiten und diese hinsichtlich verschiedener Eigenschaften bewerten, ob sie zum Geschäftsmodell passen.
Mit Context Maps wird versucht, den Kontakt zwischen Bounded Contexts auf formeller Ebene in ganzheitlicher Sicht darzustellen. Dabei geht es neben den üblichen Liefer- und Leistungsbeziehungen aber auch sehr stark um organisatorische Aspekte. Der Workshop startet mit einer kurzen Einführung zum Thema Bounded Context um dann mit diesem Wissen alle Facetten der Context Map zu erklären. Hierbei gehen wir unter anderem auch auf die Begriffe Up- und Downstream System ein. Weiterhin werden alle Patterns, die sich inzwischen in der DDD Community rund um die Context Map angesammelt haben, praxisnah erläutert. Abschließend werden im Rahmen des Workshops noch Notationsformen für Context Maps vorgestellt. Der Workshop besteht aus ca 70% Theorie und 30% Praxis. Ein grobes Vorwissen zu DDD und Bounded Contexts wäre wünschenswert.
Neu, und zudem von Google? Dies erregte Aufmerksamkeit, als die Sprache 2009 angekündigt wurde. Sie zeichnete sich durch eine kompakte und klare Syntax aus, unterstützt Concurrency durch leichtgewichtige Goroutines und Channels und kompiliert in ein Binary ohne Abhängigkeiten von externen Bibliotheken. Dazu kam eine von Beginn an umfangreiche Standardbibliothek, die ihren Fokus auf serverseitige Entwicklung legt. Und nicht zuletzt lieferte Google von Beginn an ein gutes Toolset mit.
Heute ist Go dank des pragmatischen Ansatzes in vielen bekannten Projekten rund um Cloud Native im Einsatz. So zum Beispiel Docker, LXD, Kubernetes, Juju, etcd, influxdb, Prometheus und mehr. Gleichzeitig kommt die Sprache zunehmen in der Entwicklung von Microservices zum Einsatz. Dieser Workshop ist für Entwicklerinnen und Entwickler gedacht, sich privat wie beruflich für die Nutzung von Go interessieren. Vorkenntnisse in spezifischen Sprachen sind hierbei nicht notwenig, nur ein Grundverständnis für die Software-Entwicklung.
Der Workshop gibt einen kurzen Einblick in die Geschichte von Go führt dann in Form von Übungen von der Grundlagen der Sprache bis zu praktischen Mustern und Fallstricken für eigene Lösungen. Ein installiertes Go und der bevorzugte Editor – ideal mit Plugin – helfen bei den Übungseinheiten. Doch die Entwicklung der Inhalte kann natürlich auch Notizen machend verfolgt werden.
Teamübergreifende Empathie: Wie wir mit Domain-driven Design, Event Storming und Domain Storytelling ein gemeinsames Verständnis für unser Produkt entwickeln.
Wer gute und nachhaltige Softwareprodukte entwickeln will, sollte nicht damit beginnen, Technologien oder Frameworks zu evaluieren. Der erste Schritt sollte darin bestehen, eine gemeinsame Sprache im gesamten Team zu entwickeln und zu etablieren. Dies ist unerlässlich, um Konzepte, Ideen und Lösungen mit Fachexperten diskutieren zu können.
In diesem Workshop werden wir zunächst sehr kurz die grundlegenden Ideen, Konzepte und Muster von Domain-driven Design vorstellen. In einem anschließenden praktischen Teil geht es primär um Event Storming. Wir werden zudem am Rande noch auf Domain Storytelling als Ergänzung eingehen. Beides sind zwei Ansätze des Collaborative Modeling, die technischen Expert*innen, Entwickler*innen und allen anderen Projektteilnehmer*innen helfen, ein gemeinsames Verständnis einer Geschäftsdomäne zu entwickeln und so bessere digitale Produkte zu entwickeln.
Nach dem Workshop werden die Teilnehmer*innen:
- Einen Überblick über die wichtigsten Konzepte von DDD haben
- Die Kommunikationslücken zwischen Unternehmen, Entwicklung und anderen Projektmitgliedern schließen können
- Verstehen, wie man eine Domäne mit Domain Storytelling entdeckt
- Event Storming Workshops für Ihre Produkte durchführen können
Abhängig von gewählter Plattform und Implementationsmuster, kann das Testen und Wartbarhalten eines Domänenmodells schwierig und mühselig werden: Sind die Tests zu eng an die Implementation gekoppelt, werden sie brüchig und ihre Instandhaltung teuer. Integrierte Tests sind schwer zu ändern und benötigen umfangreiches Setup. Dies sind nur einige von vielen bekannten Beispielen, die uns das Leben schwer machen können.
In diesem Workshop zeige ich:
- Eine (schnelle) Einführung in Outside-In TDD
- Eine testgetriebene, objektorientierte Implementation eines einfachen Geschäftsvorfalls (plain objects)
- Die sichere Einführung von Aggregat und Repository
- Den spürbaren Effekt von Tell-Don't-Ask
- Die verblüffend einfache Umsetzung von Hexagonaler Architektur
- Eine kleine Taxonomie von Mock-Objekten aka Test-Dubletten - und einige Tipps, wann und wo sie am besten eingesetzt werden
- (Optional, wenn genug Zeit ist): Was passiert, wenn wir CQRS and EventSourcing einführen
APIs sind heutzutage der Kern von modernen Anwendungen. Wenn sie gut designt sind, können mit ihnen ohne großen Mehraufwand neue Geschäftsfelder erschlossen und neue oder geänderte Dienstleistungen angeboten werden. Zudem werden immer mehr Systeme als Microservices-Architekturen aufgebaut, wodurch der Stellenwert auch von guten internen APIs wächst.
Je mehr Nutzer ein API hat und je weniger der Anbieter eines APIs seine Consumer kennt, um so wichtiger wird es, leicht verständliche und leicht zu verwendende APIs anzubieten, die auch sinnvoll weiterentwickelt werden können. In diesem Workshop wird gezeigt, wie solche APIs aussehen müssen.
Wie müssen sich Clients verhalten, damit sie die Schnittstelle auch bei Weiterentwicklung reibungslos verwenden können? Ansätze wie API First und Consumer-driven Contracts versuchen, diesen Anforderungen gerecht zu werden. Diese werden in dem Workshop an praktischen Beispielen vorgestellt. Zudem wird demonstriert, wie eine Schnittstelle abwärtskompatibel weiterentwickelt werden kann, ohne sich in der Versionierungshölle zu verlieren.
Event-Sourcing erhält in letzter Zeit viel Aufmerksamkeit, obwohl es beileibe kein neues Architekturpattern ist. Der grundlegende Ansatz, die Änderungen anstatt des aktuellen Zustandes zu speichern, wird seit geraumer Zeit z.B. in der Buchhaltung verwendet. Im Computerzeitalter kommt es unter anderem in den "binlogs" von Datenbanken oder bei GIT zum Einsatz.
Zu den Vorteilen dieses Patterns im Vergleich zu klassischen "Stateful Models" zählen unter anderem:
* leichtere Änderbarkeit des "Code-Models" ohne Datenbankmigration
* Experimente mit alternativen Models
* ein simples Datenbankmodell, das ohne ORM auskommt
* neue Möglichkeiten des Debuggings
* Models mit zeitbasiertem Verhalten
* Auditing
In unserem Workshop werden wir:
* Die Grundlagen von CQRS erklären, da Event-Sourcing ohne CQRS kaum möglich ist
* Erklären, was ein "Aggregate" tatsächlich ist
* Ein kleines Aggregate mittels Event-Sourcing von Grunde auf implementieren, inklusive einiger "Events", "Commands" und "Value Objects"
* Unsere Grundlage dafür wird des Ergebnis einer (fiktiven) "Event Storming" Session sein
* Wir werden dabei "test driven" (TDD) arbeiten, um nur zu implementieren, was auch wirklich benötigt wird
Microservices stellen ein neues Konzept für die Modularisierung von Anwendungen dar.
In diesem Workshop diskutieren wir zunächst, was Microservices auszeichnet. Gerade bei Microservices ist ein guter fachlicher Schnitt des Systems sehr wichtig. Domain-driven Design (DDD) – insbesondere Bounded Context – stellen eine hervorragende Basis für die Modularisierung der Domäne dar. Dieser Workshop zeigt praktisch, wie man Microservices implementieren kann. Die Umsetzung basiert auf einer modernen Infrastruktur mit Kubernetes und dem Service Mesh Istio.
Der Workshop vermittelt die Konzepte interaktiv am Beispiel. Um die Inhalte später nachvollziehen zu können, bekommen die Teilnehmer Zugriff auf entsprechende Materialien.
APIs help abstract complexity and allow easy access to data – building innovative apps has never been easier. However, once your user base reaches a critical mass, this can quickly cause performance issues and a miserable user experience. In this session we’ll introduce a concept that is similar to push notifications on your smartphone, we’ll talk about use cases and show you how easy it is to turn existing REST API endpoints into event-driven APIs that save you bandwidth, management cost and, ultimately, allow you to build engaging real-time user interfaces that delight your customers.
Event-Sourcing erhält in letzter Zeit viel Aufmerksamkeit, obwohl es beileibe kein neues Architekturpattern ist. Der grundlegende Ansatz, die Änderungen anstatt des aktuellen Zustandes zu speichern, wird seit geraumer Zeit z.B. in der Buchhaltung verwendet. Im Computerzeitalter kommt es unter anderem in den "binlogs" von Datenbanken oder bei GIT zum Einsatz.
Zu den Vorteilen dieses Patterns im Vergleich zu klassischen "Stateful Models" zählen unter anderem:
* leichtere Änderbarkeit des "Code-Models" ohne Datenbankmigration
* Experimente mit alternativen Models
* ein simples Datenbankmodell, das ohne ORM auskommt
* neue Möglichkeiten des Debuggings
* Models mit zeitbasiertem Verhalten
* Auditing
In unserem Workshop werden wir:
* Die Grundlagen von CQRS erklären, da Event-Sourcing ohne CQRS kaum möglich ist
* Erklären, was ein "Aggregate" tatsächlich ist
* Ein kleines Aggregate mittels Event-Sourcing von Grunde auf implementieren, inklusive einiger "Events", "Commands" und "Value Objects"
* Unsere Grundlage dafür wird des Ergebnis einer (fiktiven) "Event Storming" Session sein
* Wir werden dabei "test driven" (TDD) arbeiten, um nur zu implementieren, was auch wirklich benötigt wird