Softwareentwicklung ohne Abhängigkeiten

Preview:

Citation preview

Softwareentwicklungohne

Abhängigkeiten

Stefan Lieser @stefanlieser

http://refactoring-legacy-code.net

Typische Struktur von Abhängigkeiten

A B

= Funktionseinheit (Methode, Klasse, etc.)

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

Typische Struktur von Abhängigkeiten

Typische Struktur von Abhängigkeiten

Änderungen

Typische Struktur von Abhängigkeiten

=>

Keine Domänenlogik, nur Daten

Typische Struktur von Abhängigkeiten

Logik, die das Themader Anwendung betrifft.

Domänenlogik

Typische Struktur von Abhängigkeiten

Änderungen

Typische Struktur von Abhängigkeiten

=>

Keine Domänenlogik, nur Integration

Typische Struktur von Abhängigkeiten

Unit Tests einfach, da keine Abhängigkeiten

Unit Tests aufwändig, Einsatz von Attrappen

Blätter = Operationen = Domänenlogik

Knoten = Integration

Integration Operation Segregation Principle (IOSP)

Wenige Integrationstests

Viele Unittests

Viele Integrationstests

Wenige Unittests

Integration

Operation

Data

Integration Operation Data Architecture (IODA)

IOSP

Nervenzelle

Muskelzelle

Motorische Endplatte

Nervenzelle

Muskelzelle

Motorische Endplatte

Nervenzelle

Muskelzelle

Acetylcholin

Motorische Endplatte

Nervenzelle

Muskelzelle

Acetylcholin

Motorische Endplatte

Principle of Mutual Oblivion (PoMO)

Prinzip der gegenseitigen

Nichtbeachtung

PoMO

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

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; }

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!!)

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; }

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

Projektstruktur

ProjektstrukturApplication Integration .exe Projekt maximale Abhängigkeiten

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

ProjektstrukturKontrakte Interfaces, Datentypen .dll Projekt keine Abhängigkeiten

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

crm.contracts

crm

crm.persistencecrm.logic crm.ui

Integration Operation Segregation Principle (IOSP)

Principle of Mutual Oblivion (PoMO)

Prinzip der gegenseitigen

Nichtbeachtung

http://refactoring-legacy-code.net

http://linkedin.com/in/stefanlieser

https://twitter.com/StefanLieser

http://xing.com/profile/stefan_lieser

Recommended