44
Softwareentwicklung ohne Abhängigkeiten Stefan Lieser @stefanlieser http://refactoring-legacy-code.net

Softwareentwicklung ohne Abhängigkeiten

Embed Size (px)

Citation preview

Page 1: Softwareentwicklung ohne Abhängigkeiten

Softwareentwicklungohne

Abhängigkeiten

Stefan Lieser @stefanlieser

http://refactoring-legacy-code.net

Page 2: Softwareentwicklung ohne Abhängigkeiten
Page 3: Softwareentwicklung ohne Abhängigkeiten

Typische Struktur von Abhängigkeiten

Page 4: Softwareentwicklung ohne Abhängigkeiten

A B

= Funktionseinheit (Methode, Klasse, etc.)

= Abhängigkeit (A ist abhängig von B)

Typische Struktur von Abhängigkeiten

Page 5: Softwareentwicklung ohne Abhängigkeiten

Typische Struktur von Abhängigkeiten

Page 6: Softwareentwicklung ohne Abhängigkeiten

Änderungen

Typische Struktur von Abhängigkeiten

Page 7: Softwareentwicklung ohne Abhängigkeiten

=>

Keine Domänenlogik, nur Daten

Typische Struktur von Abhängigkeiten

Page 8: Softwareentwicklung ohne Abhängigkeiten

Logik, die das Themader Anwendung betrifft.

Domänenlogik

Page 9: Softwareentwicklung ohne Abhängigkeiten

Typische Struktur von Abhängigkeiten

Page 10: Softwareentwicklung ohne Abhängigkeiten

Änderungen

Typische Struktur von Abhängigkeiten

Page 11: Softwareentwicklung ohne Abhängigkeiten

=>

Keine Domänenlogik, nur Integration

Typische Struktur von Abhängigkeiten

Page 12: Softwareentwicklung ohne Abhängigkeiten
Page 13: Softwareentwicklung ohne Abhängigkeiten

Unit Tests einfach, da keine Abhängigkeiten

Page 14: Softwareentwicklung ohne Abhängigkeiten

Unit Tests aufwändig, Einsatz von Attrappen

Page 15: Softwareentwicklung ohne Abhängigkeiten

Blätter = Operationen = Domänenlogik

Knoten = Integration

Page 16: Softwareentwicklung ohne Abhängigkeiten

Integration Operation Segregation Principle (IOSP)

Page 17: Softwareentwicklung ohne Abhängigkeiten

Wenige Integrationstests

Viele Unittests

Page 18: Softwareentwicklung ohne Abhängigkeiten

Viele Integrationstests

Wenige Unittests

Page 19: Softwareentwicklung ohne Abhängigkeiten

Integration

Operation

Data

Integration Operation Data Architecture (IODA)

Page 20: Softwareentwicklung ohne Abhängigkeiten

IOSP

Page 21: Softwareentwicklung ohne Abhängigkeiten

Nervenzelle

Muskelzelle

Motorische Endplatte

Page 22: Softwareentwicklung ohne Abhängigkeiten

Nervenzelle

Muskelzelle

Motorische Endplatte

Page 23: Softwareentwicklung ohne Abhängigkeiten

Nervenzelle

Muskelzelle

Acetylcholin

Motorische Endplatte

Page 24: Softwareentwicklung ohne Abhängigkeiten

Nervenzelle

Muskelzelle

Acetylcholin

Motorische Endplatte

Page 25: Softwareentwicklung ohne Abhängigkeiten

Principle of Mutual Oblivion (PoMO)

Prinzip der gegenseitigen

Nichtbeachtung

Page 26: Softwareentwicklung ohne Abhängigkeiten

PoMO

Page 27: Softwareentwicklung ohne Abhängigkeiten

f

f2f1

Flow Design: Datenflussdiagramme

( x ) ( y )

( x ) ( y )( z )

A B

= Funktionseinheit (Methode, Klasse, etc.)

= Datenfluss (ein x fließt von A nach B)( x )

= Verfeinerung

Page 28: Softwareentwicklung ohne Abhängigkeiten

f

f2f1

Mit Abhängigkeiten (FALSCH!!)( x ) ( y )

( x ) ( y )( z )

Y f(X x) { return f1(x); }

Y f1(X x) { var z = ….

return f2(z); }

Y f2(Z z) { var y = …

return y; }

Page 29: Softwareentwicklung ohne Abhängigkeiten

f

f2f1

( x ) ( y )

( x ) ( y )( z )

Y f(X x) { return f1(x); }

Y f1(X x) { var z = ….

return f2(z); }

Y f2(Z z) { var y = …

return y; }

Integration Integration + Operation

Operation

Mit Abhängigkeiten (FALSCH!!)

Page 30: Softwareentwicklung ohne Abhängigkeiten

f

f2f1

Ohne Abhängigkeiten( x ) ( y )

( x ) ( y )( z )

Y f(X x) { var z = f1(x); var y = f2(z); return y; }

Z f1(X x) { var z = ….

return z; }

Y f2(Z z) { var y = …

return y; }

Page 31: Softwareentwicklung ohne Abhängigkeiten

f

f2f1

( x ) ( y )

( x ) ( y )( z )

Y f(X x) { var z = f1(x); var y = f2(z); return y; }

Z f1(X x) { var z = ….

return z; }

Y f2(Z z) { var y = …

return y; }

Integration Operation Operation

Ohne Abhängigkeiten

Page 32: Softwareentwicklung ohne Abhängigkeiten
Page 33: Softwareentwicklung ohne Abhängigkeiten

Projektstruktur

Page 34: Softwareentwicklung ohne Abhängigkeiten

ProjektstrukturApplication Integration .exe Projekt maximale Abhängigkeiten

Referenziert alle anderen Projekte. Startet die Anwendung in der Main Methode.

Page 35: Softwareentwicklung ohne Abhängigkeiten

ProjektstrukturKontrakte Interfaces, Datentypen .dll Projekt keine Abhängigkeiten

Page 36: Softwareentwicklung ohne Abhängigkeiten

ProjektstrukturKomponenten Logik, UI, Ressourcen, etc. .dll Projekte Keine Abhängigkeiten Referenziert lediglich die Kontrakte. Tests referenzieren zugehörige Impl.

Page 37: Softwareentwicklung ohne Abhängigkeiten

crm.contracts

crm

crm.persistencecrm.logic crm.ui

Page 38: Softwareentwicklung ohne Abhängigkeiten
Page 39: Softwareentwicklung ohne Abhängigkeiten
Page 40: Softwareentwicklung ohne Abhängigkeiten
Page 41: Softwareentwicklung ohne Abhängigkeiten
Page 42: Softwareentwicklung ohne Abhängigkeiten

Integration Operation Segregation Principle (IOSP)

Page 43: Softwareentwicklung ohne Abhängigkeiten

Principle of Mutual Oblivion (PoMO)

Prinzip der gegenseitigen

Nichtbeachtung

Page 44: Softwareentwicklung ohne Abhängigkeiten

http://refactoring-legacy-code.net

http://linkedin.com/in/stefanlieser

https://twitter.com/StefanLieser

http://xing.com/profile/stefan_lieser