softwareentwicklung ohne abhängigkeiten
TRANSCRIPT
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