Lean architecture

64
Coach für effektive Produktentwicklung Matthias Bohlen Lean Architecture Matthias Bohlen +49 170 772 8545 [email protected] http://www.mbohlen.de @mbohlende Methodless Role Methodful Role parameter1 parameter2 Context * 1 Domain class Domain object in role <<mixin>> <<instanceof>> Donnerstag, 20. September 12

description

Vortrag auf der "Jax on tour" Konferenz, September 2012: Wie können wir vermeiden, Architekturen zu entwickeln, die hochkomplex sind und Flexibilität an immer genau den Stellen eingebaut haben, an denen wir sie gerade nicht brauchen? In dieser Session beschäftigen wir uns damit, wie sich durch den „Lean Architecture“-Ansatz Systeme umsetzen lassen, die immer nur das absolut Notwendige und manchmal sogar noch weniger umsetzen und mithilfe von besonders kurzen Feedback-Schleifen so früh wie irgend möglich Erkenntnisse über das gewinnen, was wir ansonsten immer erst verspätet von frustrierten Anwendern zu hören bekommen.

Transcript of Lean architecture

Page 1: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Lean Architecture

Matthias Bohlen+49 170 772 [email protected]://www.mbohlen.de@mbohlende

Methodless Role

Methodful Role

parameter1

parameter2

Context*1

Domain class

Domain object in role

<<mixin>><<instanceof>>

Donnerstag, 20. September 12

Page 2: Lean architecture

3 Vorträge

2Donnerstag, 20. September 12

Page 3: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Der Spagat

Flexibilität bringt Geschäftje flexibler eine Organisation auf den Markt reagieren kann, desto mehr Geld verdient sie

Flexibilität kostet GeldRefactoring gibt es nicht kostenlosinsbesondere nicht auf Architekturebene

Spagatnur so viel Architektur wie notwendigaber auch so viel wie langfristig hinreichend

3Donnerstag, 20. September 12

Page 4: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Was ist Lean?Denkprinzipien1. Eliminiere Verschwendung2. Verbessere Lernprozesse3. Verzögere Entscheidungen4. Liefere schnell5. Baue Integrität ein6. Ermächtige das Team7. Sieh immer das Ganze!

Nach Mary Poppendieck

Donnerstag, 20. September 12

Page 5: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Das Ziel von Lean

Wert schaffen ist die Hauptsache

Return on Investment= (Wert - Kosten) / Investition

Wert: raufKosten: runterInvestitionen: klein

5Donnerstag, 20. September 12

Page 6: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Was ist Agilität?

Agilisten schätzen...

6

Individuen und Interaktionen

mehr als Prozesse und Werkzeuge

Funktionierende Software

mehr als umfassende Dokumentation

Zusammenarbeit mit dem Kunden

mehr als Vertragsverhandlung

Reagieren auf Veränderung

mehr als Befolgen eines Plans

Donnerstag, 20. September 12

Page 7: Lean architecture

Foto: Casey Hussein Bisson

Wie kann eine Softwarearchitektur

aussehen, die Lean und Agilität

unterstützt?

7Donnerstag, 20. September 12

Page 8: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Was ist Softwarearchitektur?

8

Architektur ist die Menge von Entscheidungen, von denen Sie wünschten, Sie könnten sie früh im Projekt richtig treffen (aber bei denen die Wahrscheinlichkeit, sie richtig zu treffen, nicht notwendigerweise größer ist als bei jeder anderen Entscheidung).

Ralph Johnson

Donnerstag, 20. September 12

Page 9: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Mentales Modell des Benutzers

Repräsentation im Bewusstsein

★ entscheidende Domänenkonzepte

★ deren Beziehungen untereinander

★ Vorgänge, die auf diesen Domänenkonzepten möglich sind

9Donnerstag, 20. September 12

Page 10: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Verständliche Architektur

sollte das mentale Modell des Benutzers wiederspiegeln

Das System sollte sich so verhalten, wie der Benutzer es erwartet

Die Architektur scheint immer durch, da kann die Oberfläche so gut sein wie sie will!

10Donnerstag, 20. September 12

Page 11: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Tony Hoare, 1980

11

"Es gibt zwei Wege, ein Software-Design zu konstruieren:• so simpel, dass es offensichtlich

keine Schwächen hat• so kompliziert, dass es keine

offensichtlichen Schwächen hat.Die erste Methode ist weitaus schwieriger."

Donnerstag, 20. September 12

Page 12: Lean architecture

Form versus Struktur

12

Struktur stützt FormForm ermöglicht Verhalten

Donnerstag, 20. September 12

Page 13: Lean architecture

Form versus Struktur

12

Struktur stützt FormForm ermöglicht Verhalten

Donnerstag, 20. September 12

Page 14: Lean architecture

Form versus Struktur

12

Struktur stützt FormForm ermöglicht Verhalten

Donnerstag, 20. September 12

Page 15: Lean architecture

Form versus Struktur

12

Struktur stützt FormForm ermöglicht Verhalten

Donnerstag, 20. September 12

Page 16: Lean architecture

Form

"Essenz" der Strukturwahrnehmbar, interessantwertlieferndkonstant

13

Foto: Maik Maid

Donnerstag, 20. September 12

Page 17: Lean architecture

Struktur

notwendig für die Formwahrnehmbar, doch weniger interessantKosten erzeugendstabil

14

Foto: Ralph Aichinger

Donnerstag, 20. September 12

Page 18: Lean architecture

Verhalten

das, was in der Form passieren kanninteressantNutzen stiftendvariabel, flexibel

15Foto: Benjamin Thompson

Donnerstag, 20. September 12

Page 19: Lean architecture

16

Form Struktur Verhalten

Essenz der Struktur

Stütze der Form

was in der Form passiert

wahrnehmbar notwendig interessant

Wertliefernd

Kosten erzeugend

Nutzen stiftend

konstant stabil variabel

Donnerstag, 20. September 12

Page 20: Lean architecture

16

Form Struktur Verhalten

Essenz der Struktur

Stütze der Form

was in der Form passiert

wahrnehmbar notwendig interessant

Wertliefernd

Kosten erzeugend

Nutzen stiftend

konstant stabil variabellean

Donnerstag, 20. September 12

Page 21: Lean architecture

16

Form Struktur Verhalten

Essenz der Struktur

Stütze der Form

was in der Form passiert

wahrnehmbar notwendig interessant

Wertliefernd

Kosten erzeugend

Nutzen stiftend

konstant stabil variabellean agil

Donnerstag, 20. September 12

Page 22: Lean architecture

Architektur ermittelt zwei Formen

17

Was das System ist

Was das System tut

BenutzertätigkeitenRollen, Aufzeichnungen

EndbenutzerUser Experience Leute

Interface DesignerSich ständig ändernde

Funktionalität

BenutzergedankenKlassen und ObjekteDomänenexpertenArchitektenDatenbankschemataLangzeitstabile Struktur

Donnerstag, 20. September 12

Page 23: Lean architecture

18

Was das System ist

FormSubsysteme

Interfaces, APIsDomänenobjekte

StrukturModulePaketeKlassen

Donnerstag, 20. September 12

Page 24: Lean architecture

19

Was das System tut

FormUse CaseKontext

Methodenfreie Rollen

Struktur Methodenreiche RollenAlgorithmen

Donnerstag, 20. September 12

Page 25: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Mit der Form beginnenFragen Sie die StakeholderAnalysieren Sie die Form des Systems

Partitionierung nach Gemeinsamkeit und Veränderlichkeit

Wählen Sie einen Entwurfsstilmeistens ist das Objektorientierung

Gießen Sie die Form in CodeForm als abstrakte Basisklassen und methodenfreie Rollen

Lassen Sie die Entwicklerteams die Struktur und das Verhalten entwerfen

20Donnerstag, 20. September 12

Page 26: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

User Story

Als ein Kontoinhabermöchte ich Geld überweisen

(von meinem Sparkonto auf mein Girokonto)

um etwas anzuschaffen

21

Wer? Akteur = KontoinhaberWas? Tätigkeit = Geld überweisenWarum? Ziel = Anschaffung

Donnerstag, 20. September 12

Page 27: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Use Case "Geld intern überweisen"

22

Schritt Akteur-Intention Systemverantwortung

1. Kontoinhaber wählt Quellkonto und verlangt Überweisung

Bank zeigt Quellkonto, eine Liste von Zielkonten und ein Feld zur Eingabe des Betrags

2. Kontoinhaber wählt Zielkonto, gibt den Betrag ein und bestätigt

Bank zeigt Überweisungsinformationen (Quellkonto, Zielkonto, Datum, Betrag) und verlangt eine TAN, um die Überweisung zu legitimieren

3. Kontoinhaber gibt TAN ein und bestätigt

Bank bewegt das Geld und führt die Konten.

Donnerstag, 20. September 12

Page 28: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Vom Use Case zur Technik

"Geld überweisen" ist etwas Fachliches"Geld bewegen und Konten führen" ist etwas eher Mechanisches

Letzteres nennen wir eine Gewohnheit.Im Architekturteam finden wir eine Form für diese Gewohnheit und überlassen es dem Entwicklungsteam, die Struktur dafür aufzubauen.

23Donnerstag, 20. September 12

Page 29: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Vom Was zum Wie

24

Schritt Geld bewegen und Konten führen

1. Bank verifiziert, dass genügend Geld da ist

2. Bank aktualisiert die Konten

3. Bank aktualisiert die Kontoauszüge

Donnerstag, 20. September 12

Page 30: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Vom Was zum Wie

24

Schritt Geld bewegen und Konten führen

1. Bank verifiziert, dass genügend Geld da ist

2. Bank aktualisiert die Konten

3. Bank aktualisiert die Kontoauszüge

Quellkonto

Donnerstag, 20. September 12

Page 31: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Vom Was zum Wie

24

Schritt Geld bewegen und Konten führen

1. Bank verifiziert, dass genügend Geld da ist

2. Bank aktualisiert die Konten

3. Bank aktualisiert die Kontoauszüge

Quellkonto

Quellkonto und Zielkonto aktualisierenihre Stände.

Donnerstag, 20. September 12

Page 32: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Vom Was zum Wie

24

Schritt Geld bewegen und Konten führen

1. Bank verifiziert, dass genügend Geld da ist

2. Bank aktualisiert die Konten

3. Bank aktualisiert die Kontoauszüge

Quellkonto

Quellkonto und Zielkonto aktualisierenihre Stände.

Quellkonto

Donnerstag, 20. September 12

Page 33: Lean architecture

Coach für effektive ProduktentwicklungMatthias BohlenSzenario in Algorithmus umwandeln

25

1.Quellkonto verifiziert, dass genügend Geld da ist

1.Quellkonto verifiziert, dass sein Stand größer ist als der Minimalstand plus Überweisungsbetrag und wirft eine Exception, falls das nicht der Fall ist

2.Quellkonto und Zielkonto aktualisieren ihre Stände

2.Quellkonto reduziert seinen Stand um den Überweisungsbetrag

3.Quellkonto fordert Zielkonto auf, seinen Stand zu erhöhen

3.Quellkonto aktualisiert die Kontoauszüge

4.Quellkonto notiert auf seinem Kontoauszug, dass dies eine Überweisung war

5.Quellkonto fordert Zielkonto auf, auf seinem Kontoauszug eine Überweisung einzutragen.

6.Quellkonto signalisiert Erfolg der Überweisung.

Donnerstag, 20. September 12

Page 34: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

DCI: ein Architektur-Stil

D = DataC = ContextI = InteractionDaten (repräsentiert durch Domänenobjekte) spielen interagierende Rollen innerhalb eines Kontextes, der dem Use Case entspricht.Das soll man im Code auch so sehen können!

26Donnerstag, 20. September 12

Page 35: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

DCI ist wie eine Theateraufführung

27

Sparkonto Girokonto

Objekt

Kontext: Geld bewegen und Konten führen

Quellkonto Zielkonto

Rolle

Donnerstag, 20. September 12

Page 36: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

DCI Architekturmuster

28

Methodless Role

Methodful Role

parameter1

parameter2

Context*1

Domain class

Domain object in role

<<mixin>><<instanceof>>

Donnerstag, 20. September 12

Page 37: Lean architecture

Daten

/** * Domain class that captures the concept of a * bank-internal account in general. */class Account { private Long balance = 0L

Long availableBalance() { balance }

def increaseBalance(amount) { balance += amount }

def decreaseBalance(amount) { balance -= amount }

def updateLog (msg, date, amount) { println toString() + " Account: $msg, $date, $amount" }}

29Donnerstag, 20. September 12

Page 38: Lean architecture

Daten

/** * Domain class that captures the concept of a savings * account. */class SavingsAccount extends Account { String toString() { "Savings" }}

/** * Domain class that captures the concept of a checking * account. */class CheckingAccount extends Account { String toString() { "Checking" }}

30Donnerstag, 20. September 12

Page 39: Lean architecture

Methodenlose Rollen

/** * Methodless role that captures the form (interface) * of one part of the Transfer behavior */interface MoneySource { def transferTo (Long amount, MoneySink recipient)}

/** * Methodless role that captures the form (interface) * of the other part of the Transfer behavior */interface MoneySink { def transferFrom (Long amount, MoneySource source)}

31Donnerstag, 20. September 12

Page 40: Lean architecture

Methodenreiche Rolle

/** * Methodful role for the source account * for the money transfer. */class TransferMoneySource implements MoneySource {

def transferTo (Long amount, MoneySink recipient) { // This code is reviewable and // meaningfully testable with stubs! if (availableBalance() < amount) { throw new InsufficientFundsException() } else { decreaseBalance (amount) recipient.transferFrom (amount, this) updateLog ("Transfer Out", new Date(), amount) } }

}

32Donnerstag, 20. September 12

Page 41: Lean architecture

Methodenreiche Rolle

/** * Methodful role for the recipient account * for the money transfer. */class TransferMoneySink implements MoneySink {

def transferFrom (Long amount, MoneySource source) { increaseBalance (amount) updateLog ("Transfer In", new Date(), amount) }}

33Donnerstag, 20. September 12

Page 42: Lean architecture

Kontext

/** * Context of the "Transfer Money" use case. */class TransferMoneyContext { MoneySource source MoneySink recipient Long amount

def bindObjects() { // find objects and assign to source & recipient. // this would normally be a database lookup! }

def doIt() { source.transferTo (amount, recipient) }}

34Donnerstag, 20. September 12

Page 43: Lean architecture

Objekte an Rollen binden (im Kontext)

// this is from class TransferMoneyContext...MoneySource sourceMoneySink recipient

def bindObjects() { // this would normally be a database lookup! def savings = new SavingsAccount() savings.increaseBalance (1000L) def checking = new CheckingAccount()

// now mix-in the roles of these objects // so that each object gets the methods needed by // the use case and by the other roles. savings.metaClass.mixin TransferMoneySource checking.metaClass.mixin TransferMoneySink

this.source = savings as MoneySource this.recipient = checking as MoneySink}

35Donnerstag, 20. September 12

Page 44: Lean architecture

Kleiner Testtreiber für den Use Case

// -------------------------------------------------------// -- Test driver --// -------------------------------------------------------

def testContext = new TransferMoneyContext()

testContext.amount = 200testContext.bindObjects()testContext.doIt()

assert 800 == testContext.source.availableBalance()assert 200 == testContext.recipient.availableBalance()

36Donnerstag, 20. September 12

Page 45: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Anderer Stil: Atomic Events Architecture

In vielen Anwendungen sind Use Cases tatsächlich Overkill

es geht um Events, die auf Objekte wirken

Problem:Wenn man nicht aufpasst, designt man Rollenmethoden ins Domänenobjekt hineinMischung von Aspekten mit unterschiedlicher Änderungsrate bringt Ärger!

Lösung:Rolle und Objekt auseinanderhalten!

37Donnerstag, 20. September 12

Page 46: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Beispiele für Atomic Events

Ein Buch in einen Einkaufswagen legenEinem Rechteck eine neue Farbe geben

Doch Vorsicht:Was ist mit Undo auf die Farbe des Rechtecks?Was ist, wenn mehrere Rechtecke gleichzeitig eingefärbt werden sollen?

38Donnerstag, 20. September 12

Page 47: Lean architecture

Foto: Casey Hussein Bisson

Wie kann man im Team an der Architektur arbeiten?

39Donnerstag, 20. September 12

Page 48: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Agile Architekturrunde:Gemeinsam sind wir Architekten !

40

Benutzer

Entwickler

Business

Domänen-

experte

Architekt

Fachbereich

Analyst

etc.

Designer

Programmierer

Tester

Kunde

Donnerstag, 20. September 12

Page 49: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Zusammenarbeit

41

Architekturrunde

Saturn-

Team

Neptun-

Team

Architektur

Saturn-BacklogNeptun-Backlog

Saturn Neptun Delegation

Delegation

Donnerstag, 20. September 12

Page 50: Lean architecture

42

Was das System ist Was das System tut

FormSubsysteme

Interfaces, APIsDomänenobjekte

Use CaseKontext

Methodenfreie Rollen

StrukturModulePaketeKlassen

Methodenreiche Rollen

Algorithmen

Form geht alle an!Form ändert sich seltener als Struktur!

Donnerstag, 20. September 12

Page 51: Lean architecture

42

Was das System ist Was das System tut

FormSubsysteme

Interfaces, APIsDomänenobjekte

Use CaseKontext

Methodenfreie Rollen

StrukturModulePaketeKlassen

Methodenreiche Rollen

Algorithmen

Form geht alle an!Form ändert sich seltener als Struktur!

Donnerstag, 20. September 12

Page 52: Lean architecture

42

Was das System ist Was das System tut

FormSubsysteme

Interfaces, APIsDomänenobjekte

Use CaseKontext

Methodenfreie Rollen

StrukturModulePaketeKlassen

Methodenreiche Rollen

Algorithmen

Form geht alle an!Form ändert sich seltener als Struktur!

Daher: Im Architekturteam die Form aufbauen,in den anderen Teams die Strukturen schaffen!

Donnerstag, 20. September 12

Page 53: Lean architecture

Foto: Casey Hussein Bisson

Schlanke Architektur-Dokumentation

43Donnerstag, 20. September 12

Page 54: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Schlanke Architekturdokumentation

44

Aspekt Bedeutung Medien

Form Subsysteme, APIs, von außen sichtbares Verhalten

Bilder und Vodcasts im Wiki, APIs im Code

Struktur Subsystem-interne Klassen und Schnittstellen

Code

Verhalten wichtige Abläufe im System

Bilder im Wiki, den Rest im Code

Stil Entwurfsprinzipien Wiki

Donnerstag, 20. September 12

Page 55: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Dokumentation

QuerschnittskonzeptePersistenz, Logging, Transaktionsbehandlung, Authentifizierung, Autorisierung, usw.

Design-EntscheidungenDatum, Ausgangslage, Problemstellung, gewählte/verworfene Optionen, Entscheidungsweg/Begründung, Wiki

45Donnerstag, 20. September 12

Page 56: Lean architecture

Foto: Casey Hussein Bisson

Plädiert der Bohlen jetzt etwa für den Wasserfall?

46Donnerstag, 20. September 12

Page 57: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

BDUF und YAGNI, die zwei Extreme

BDUF = Big Design Up Frontheute schon für morgen mitentwerfenkomplett mit allen Detailsdanach alles runtercodierenEntwurf von heute unverändert lassen

YAGNI = You Aren't Gonna Need Itnur das entwerfen und codieren, was heute gebraucht wirdsollte morgen etwas anderes gebraucht werden, den Entwurf von heute ändern

47Donnerstag, 20. September 12

Page 58: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Annahmen hinter BDUF und YAGNI

BDUF:je später wir ändern, desto teurer wird'slanges Nachdenken ist billiger als ändernalso Architektur vor Implementierung

YAGNI:Änderungen sind einfach / kostengünstigÄndern ist billiger als langes Nachdenkenalso Architektur während Implementierung

48Donnerstag, 20. September 12

Page 59: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Mein Vorschlag: DBUF

DBUF = Design the Big things Up FrontEntwirf die "großen Sachen" (Form) vorher,den Rest unterwegs

Was heißt eigentlich "teuer zu ändern"?Form teurer als StrukturStruktur teurer als Verhalten

Struktur basiert auf FormStruktur schaffen ohne Form zu kennen, bedeutet Nacharbeit und Verschwendung

49Donnerstag, 20. September 12

Page 60: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

DBUF = Design Big things Up Front

Identifizieren Sie frühzeitigdie komprimierteste Darstellung (Form) von dem, was das System istdie komprimierteste Darstellung (Form) von dem, was das System tut

Dann haben Sie eine gute Grundlage zum Aufbau von StrukturBauen Sie die Struktur erst auf, wenn sie gebraucht wird.

50Donnerstag, 20. September 12

Page 61: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Architektur besteht aus Form, Struktur und Stil

Sie sollte das mentale Modell des Users widerspiegeln (Konzepte und deren Verhalten)

Lean sind wir, indem wir die Form "früh" richtig hinbekommen

Agil sind wir, indem wir innerhalb dieser Form "spät" und "schnell" Strukturen ändern und Verhalten schaffen

51

Zusammen-fassung

Donnerstag, 20. September 12

Page 62: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Literatur

James Coplien, Gertrud Bjornvig:"Lean Architecture", Wiley & Sons 2010

Trygve Reenskaug:http://folk.uio.no/trygver"The Common Sense of Object Orientated Programming"http://folk.uio.no/trygver/2008/commonsense.pdf

52Donnerstag, 20. September 12

Page 63: Lean architecture

Coach für effektive ProduktentwicklungMatthias Bohlen

Mehr Info? Hier melden!

Matthias BohlenCoach für effektive Produktentwicklung

Telefon: +49 170 772 8545E-Mail: [email protected]: http://www.mbohlen.de/Twitter: @mbohlende

Donnerstag, 20. September 12

Page 64: Lean architecture

Nächster Vortrag

54

morgen früh, 09:00 Uhr

Donnerstag, 20. September 12