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. 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
  2. Clean Code Developer Initiative 4 Werte - Korrektheit - Wandelbarkeit

    (Evolvierbarkeit) - Produktionseffizienz - Kontinuierliche Verbesserung
  3. Clean Code Developer Initiative 5 Grade erleichtern das Lernen - 

    Rot -  Orange -  Gelb -  Grün -  Blau Je ca. 8 Prinzipien & Praktiken
  4. CCD School Trainings 5 Tage Training 4 Wochen Pause mit

    Hausaufgabe 5 Tage Training 6-10 Einzeltage 4 Wochen Pausen mit Hausaufgaben
  5. 2010 dotnetpro Dojo Seitdem in jedem Heft: - eine neue

    Übungsaufgabe - meine Lösung zum Vormonat Aktuell: 89 Aufgaben mit Lösung
  6. CCD School Trainings Erkenntnis: In den Code Reviews zeigen sich

    Verletzungen der Prinzipien Unser Ziel: Ein methodisches Vorgehen entwickeln
  7. 2011 Flow Design und Event Based Components (EBC) Entwurf mit

    Datenflüssen Implementation mit Events und Methoden
  8. 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
  9. <?xml version="1.0" encoding="uA-8"?> <board name="NeueDatenBoard"> <using namespace="verbräuche.contracts.infrastructure"/> <using namespace="verbräuche.contracts.model"/> <using

    namespace="verbräuche.contracts.viewmodels"/> <external name="IMap_Verbrauchswerte_to_Viewmodel"/> <wire from="JahresübersichtVM.Neue_Daten" type="“ to="Folgemonat_ermi#eln"/> <wire from="Folgemonat_ermi#eln" type="string“ to="NeueDatenVM.Monat_setzen"/> <wire from="NeueDatenVM" type="DatensatzVM" to="Map_to_Datensatz"/> <wire from="Map_to_Datensatz" type="Datensatz" to="Datensatz_anhängen"/> <wire from="Datensatz_anhängen" type="Datensatz*" to="Map_Verbrauchswerte_to_Viewmodel"/> <dependency from="Folgemonat_ermi#eln" to="Verbrauchswerte"/> <dependency from="Datensatz_anhängen" to="Verbrauchswerte"/> </board>
  10. 2012 Flow Runtime NPantaRhei Flow als String notieren, Verdrahtung per

    Konvention Parallelisierung per Konfiguration möglich Debugging schwer nachvollziehbar
  11. public IEnumerable<string> 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; }
  12. public void CellChanged(int x, int y) { var world =

    state.Get(); var newWorld = gameOfLife.ToggleCellAt(world, x, y); state.Put(newWorld); }
  13. public void Start(Action<bool[,]> onUpdate) { timerProvider.Start(() => { var world

    = state.Get(); var newWorld = gameOfLife.Evolution(world); state.Put(newWorld); synchronization.Sync(() => { onUpdate(newWorld); }); }); }
  14. 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)