Softwareentwicklung

ohne

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 Thema

der 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.)
= Date...
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...
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 = ...
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) {
v...
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;
...
Projektstruktur
Projektstruktur
Application
Integration
.exe Projekt
maximale
Abhängigkeiten
Referenziert alle anderen
Projekte. Startet d...
Projektstruktur
Kontrakte
Interfaces, Datentypen
.dll Projekt
keine Abhängigkeiten
Projektstruktur
Komponenten
Logik, UI, Ressourcen,

etc.
.dll Projekte
Keine Abhängigkeiten
Referenziert lediglich

die Ko...
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/pr...
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Softwareentwicklung ohne Abhängigkeiten
Nächste SlideShare
Wird geladen in …5
×

Softwareentwicklung ohne Abhängigkeiten

313 Aufrufe

Veröffentlicht am

Abhängigkeiten sind das Grundübel der Softwareenwicklung. Durch Einhaltung des Integration Operation Segregation Principle (IOSP) verlieren die Abhängigkeiten ihren Schrecken. Ferner wird der Code so leicht automatisiert testbar. Durch Einhaltung des Principle of Mutual Oblivion (PoMO) werden unnötige Abhängigkeiten reduziert.
Die Folien zeigen die beiden typischen Strukturen von Abhängigkeiten und wie man damit umgeht. Weitere Infos siehe http://refactoring-legacy-code.net

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
313
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
22
Aktionen
Geteilt
0
Downloads
9
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Softwareentwicklung ohne Abhängigkeiten

  1. 1. Softwareentwicklung
 ohne
 Abhängigkeiten
 
 Stefan Lieser
 @stefanlieser
 http://refactoring-legacy-code.net
  2. 2. Typische Struktur von Abhängigkeiten
  3. 3. A B = Funktionseinheit (Methode, Klasse, etc.) = Abhängigkeit (A ist abhängig von B) Typische Struktur von Abhängigkeiten
  4. 4. Typische Struktur von Abhängigkeiten
  5. 5. Änderungen Typische Struktur von Abhängigkeiten
  6. 6. => Keine Domänenlogik, nur Daten Typische Struktur von Abhängigkeiten
  7. 7. Logik, die das Thema
 der Anwendung betrifft. Domänenlogik
  8. 8. Typische Struktur von Abhängigkeiten
  9. 9. Änderungen Typische Struktur von Abhängigkeiten
  10. 10. => Keine Domänenlogik, nur Integration Typische Struktur von Abhängigkeiten
  11. 11. Unit Tests einfach, da keine Abhängigkeiten
  12. 12. Unit Tests aufwändig, Einsatz von Attrappen
  13. 13. Blätter = Operationen = Domänenlogik Knoten = Integration
  14. 14. Integration Operation Segregation Principle (IOSP)
  15. 15. Wenige Integrationstests Viele Unittests
  16. 16. Viele Integrationstests Wenige Unittests
  17. 17. Integration Operation Data Integration Operation Data Architecture (IODA)
  18. 18. IOSP
  19. 19. Nervenzelle Muskelzelle Motorische Endplatte
  20. 20. Nervenzelle Muskelzelle Motorische Endplatte
  21. 21. Nervenzelle Muskelzelle Acetylcholin Motorische Endplatte
  22. 22. Nervenzelle Muskelzelle Acetylcholin Motorische Endplatte
  23. 23. Principle of Mutual Oblivion (PoMO) Prinzip der gegenseitigen Nichtbeachtung
  24. 24. PoMO
  25. 25. 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
  26. 26. 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; }
  27. 27. 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!!)
  28. 28. 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; }
  29. 29. 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
  30. 30. Projektstruktur
  31. 31. Projektstruktur Application Integration .exe Projekt maximale Abhängigkeiten Referenziert alle anderen Projekte. Startet die Anwendung in der Main Methode.
  32. 32. Projektstruktur Kontrakte Interfaces, Datentypen .dll Projekt keine Abhängigkeiten
  33. 33. Projektstruktur Komponenten Logik, UI, Ressourcen,
 etc. .dll Projekte Keine Abhängigkeiten Referenziert lediglich
 die Kontrakte. Tests referenzieren zugehörige Impl.
  34. 34. crm.contracts crm crm.persistencecrm.logic crm.ui
  35. 35. Integration Operation Segregation Principle (IOSP)
  36. 36. Principle of Mutual Oblivion (PoMO) Prinzip der gegenseitigen Nichtbeachtung
  37. 37. http://refactoring-legacy-code.net http://linkedin.com/in/stefanlieser https://twitter.com/StefanLieser http://xing.com/profile/stefan_lieser

×