Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nextlevel Clean Code Development

Nextlevel Clean Code Development

Session auf der Developer Week DWX 2017.

Stefan Lieser

June 28, 2017
Tweet

More Decks by Stefan Lieser

Other Decks in Programming

Transcript

  1. Nextlevel
    Clean Code Development
    Stefan Lieser
    @stefanlieser
    h#p://refactoring-legacy-code.net

    View full-size slide

  2. 2008/2009
    Clean Code Developer Initiative
    http://clean-code-developer.de

    View full-size slide

  3. Clean Code Developer Initiative
    42 Prinzipien und Praktiken
    -  DRY: Don‘t Repeat Yourself
    -  SLA: Single Level Abstraction
    -  SRP: Single Responsibility
    Principle
    -  Test-first
    -  Continuous Integration

    View full-size slide

  4. Clean Code Developer Initiative
    4 Werte
    - Korrektheit
    - Wandelbarkeit (Evolvierbarkeit)
    - Produktionseffizienz
    - Kontinuierliche Verbesserung

    View full-size slide

  5. Clean Code Developer Initiative
    5 Grade erleichtern das Lernen
    -  Rot
    -  Orange
    -  Gelb
    -  Grün
    -  Blau
    Je ca. 8 Prinzipien
    & Praktiken

    View full-size slide

  6. 2009
    Erste CCD School Trainings
    http://ccd-school.de

    View full-size slide

  7. CCD School Trainings
    5 Tage Training
    4 Wochen Pause mit Hausaufgabe
    5 Tage Training

    View full-size slide

  8. CCD School Trainings
    5 Tage Training
    4 Wochen Pause mit Hausaufgabe
    5 Tage Training
    6-10 Einzeltage
    4 Wochen Pausen mit Hausaufgaben

    View full-size slide

  9. 2010
    dotnetpro Dojo
    Seitdem in jedem Heft:
    - eine neue Übungsaufgabe
    - meine Lösung zum Vormonat
    Aktuell: 89 Aufgaben mit Lösung

    View full-size slide

  10. CCD School Trainings
    Erkenntnis:
    In den Code Reviews zeigen sich
    Verletzungen der Prinzipien
    Unser Ziel:
    Ein methodisches Vorgehen
    entwickeln

    View full-size slide

  11. 2010
    Injection Based Components (IBC)
    Entwurf mit Abhängigkeits-
    diagrammen
    System-Umwelt-Diagramm
    (Softwarezelle)
    Featurestreams

    View full-size slide

  12. 2011
    Flow Design
    und
    Event Based Components (EBC)
    Entwurf mit Datenflüssen
    Implementation mit Events und
    Methoden

    View full-size slide

  13. var zerlegenInZeichenfolgen =
    new ZerlegenInZeichenfolgen();
    var zeichenfolgenTrennen =
    new ZeichenfolgenTrennen();
    var zusammenfassenZuZeilen =
    new ZusammenfassenZuZeilen();
    var zusammenfassenZuText =
    new ZusammenfassenZuText();
    zerlegenInZeichenfolgen.Out_Result +=
    zeichenfolgenTrennen.In_Process;
    zeichenfolgenTrennen.Out_Result +=
    zusammenfassenZuZeilen.In_Process;
    zusammenfassenZuZeilen.Out_Result +=
    zusammenfassenZuText.In_Process;
    zusammenfassenZuText.Out_Result += text => Out_Result(text);
    Event
    Methode

    View full-size slide

  14. 2011
    EBC Tooling
    Flow in XML notieren,
    Codegenerator, Visualisierung

    View full-size slide











  15. to="Map_Verbrauchswerte_to_Viewmodel"/>



    View full-size slide

  16. 2012
    Flow Runtime NPantaRhei
    Flow als String notieren,
    Verdrahtung per Konvention
    Parallelisierung per
    Konfiguration möglich
    Debugging schwer nachvollziehbar

    View full-size slide

  17. /
    .start, mail_abholen
    mail_abholen, erinnerungsauUrag_erstellen
    erinnerungsauUrag_erstellen, erinnerungsauUrag_speichern
    erinnerungsauUrag_speichern, mail_verschieben
    mail_verschieben, .exit

    View full-size slide

  18. 2013
    Methoden statt Klassen
    Drastische Vereinfachung!

    View full-size slide

  19. public IEnumerable Start() {
    var filename = EnvironmentProvider.Hole_Dateiname();
    var text = TextdateiProvider.Lese_Text(filename);
    textspeicher.Setze_Text(text);
    var size = seitengröße.Hole_Fenstergröße();
    var umbrochener_text =
    Textanalyse.Umbreche_Text(text, size.Width);
    var seite = blättern.Extrahiere_erste_Seite(
    umbrochener_text, size.Height);
    return seite;
    }

    View full-size slide

  20. 2013
    IOSP / PoMO / IODA
    Die wichtigsten Prinzipien.

    View full-size slide

  21. Integration Operation
    Segregation Principle (IOSP)

    View full-size slide

  22. Principle of Mutual
    Oblivion (PoMO)
    Prinzip der
    gegenseitigen
    Nichtbeachtung

    View full-size slide

  23. Integration
    Operation
    Data
    Integration Operation
    Data API (IODA)
    API

    View full-size slide

  24. Nextlevel
    -  Softwareuniversum
    -  System-Umwelt-Diagramm
    -  Domänenzerlegung (Anforderungen)
    -  Flow Design für den Entwurf
    -  IOSP/PoMO/IODA

    View full-size slide

  25. Rolle Ressource
    System
    Portal Provider
    Domänenlogik

    View full-size slide

  26. Domänenzerlegung: Dialoge und Interaktionen

    View full-size slide

  27. Entwurf der obersten Ebene

    View full-size slide

  28. Verfeinerung der Entwürfe

    View full-size slide

  29. public bool[,] Initialize() {
    var world = gameOfLife.CreateEmptyWorld();
    state.Put(world);
    return world;
    }

    View full-size slide

  30. public void CellChanged(int x, int y) {
    var world = state.Get();
    var newWorld = gameOfLife.ToggleCellAt(world, x, y);
    state.Put(newWorld);
    }

    View full-size slide

  31. public void Start(Action onUpdate) {
    timerProvider.Start(() => {
    var world = state.Get();
    var newWorld = gameOfLife.Evolution(world);
    state.Put(newWorld);
    synchronization.Sync(() => {
    onUpdate(newWorld);
    });
    });
    }

    View full-size slide

  32. public void Stop() {
    timerProvider.Stop();
    }

    View full-size slide

  33. Fazit
    Clean Code entsteht nur durch
    methodisches Vorgehen

    View full-size slide

  34. Fazit
    Clean Code entsteht nur durch
    methodisches Vorgehen
    Anforderungen müssen zerlegt werden
    (Slicing, Domänenzerlegung)

    View full-size slide

  35. Fazit
    Clean Code entsteht nur durch
    methodisches Vorgehen
    Anforderungen müssen zerlegt werden
    (Slicing, Domänenzerlegung)
    Entwurf der Lösung vor der Umsetzung
    ist notwendig (Flow Design)

    View full-size slide

  36. h#p://stefanlieser.teachable.com

    View full-size slide

  37. h#p://refactoring-legacy-code.net
    h#p://linkedin.com/in/stefanlieser
    h#ps://twi#er.com/StefanLieser
    h#p://xing.com/profile/stefan_lieser

    View full-size slide