Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nextlevel Clean Code Development
Search
Stefan Lieser
June 28, 2017
Programming
0
950
Nextlevel Clean Code Development
Session auf der Developer Week DWX 2017.
Stefan Lieser
June 28, 2017
Tweet
Share
More Decks by Stefan Lieser
See All by Stefan Lieser
Lernen durch Üben
slieser
0
620
Other Decks in Programming
See All in Programming
AIコーディングAgentとの向き合い方
eycjur
0
280
Improving my own Ruby thereafter
sisshiki1969
1
160
知っているようで知らない"rails new"の世界 / The World of "rails new" You Think You Know but Don't
luccafort
PRO
1
190
Rancher と Terraform
fufuhu
2
550
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
410
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
510
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
OSS開発者という働き方
andpad
5
1.7k
より安全で効率的な Go コードへ: Protocol Buffers Opaque API の導入
shwatanap
2
690
そのAPI、誰のため? Androidライブラリ設計における利用者目線の実践テクニック
mkeeda
2
1.8k
旅行プランAIエージェント開発の裏側
ippo012
2
920
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Code Review Best Practice
trishagee
71
19k
The Invisible Side of Design
smashingmag
301
51k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
Being A Developer After 40
akosma
90
590k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Context Engineering - Making Every Token Count
addyosmani
3
58
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Transcript
Nextlevel Clean Code Development Stefan Lieser @stefanlieser h#p://refactoring-legacy-code.net
2008/2009 Clean Code Developer Initiative http://clean-code-developer.de
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
Clean Code Developer Initiative 4 Werte - Korrektheit - Wandelbarkeit
(Evolvierbarkeit) - Produktionseffizienz - Kontinuierliche Verbesserung
Clean Code Developer Initiative 5 Grade erleichtern das Lernen -
Rot - Orange - Gelb - Grün - Blau Je ca. 8 Prinzipien & Praktiken
None
None
2009 Erste CCD School Trainings http://ccd-school.de
CCD School Trainings 5 Tage Training 4 Wochen Pause mit
Hausaufgabe 5 Tage Training
CCD School Trainings 5 Tage Training 4 Wochen Pause mit
Hausaufgabe 5 Tage Training 6-10 Einzeltage 4 Wochen Pausen mit Hausaufgaben
2010 dotnetpro Dojo Seitdem in jedem Heft: - eine neue
Übungsaufgabe - meine Lösung zum Vormonat Aktuell: 89 Aufgaben mit Lösung
CCD School Trainings Erkenntnis: In den Code Reviews zeigen sich
Verletzungen der Prinzipien Unser Ziel: Ein methodisches Vorgehen entwickeln
2010 Injection Based Components (IBC) Entwurf mit Abhängigkeits- diagrammen System-Umwelt-Diagramm
(Softwarezelle) Featurestreams
None
None
2011 Flow Design und Event Based Components (EBC) Entwurf mit
Datenflüssen Implementation mit Events und Methoden
None
None
None
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
2011 EBC Tooling Flow in XML notieren, Codegenerator, Visualisierung
<?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>
None
2012 Flow Runtime NPantaRhei Flow als String notieren, Verdrahtung per
Konvention Parallelisierung per Konfiguration möglich Debugging schwer nachvollziehbar
/ .start, mail_abholen mail_abholen, erinnerungsauUrag_erstellen erinnerungsauUrag_erstellen, erinnerungsauUrag_speichern erinnerungsauUrag_speichern, mail_verschieben mail_verschieben,
.exit
None
2013 Methoden statt Klassen Drastische Vereinfachung!
None
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; }
2013 IOSP / PoMO / IODA Die wichtigsten Prinzipien.
Integration Operation Segregation Principle (IOSP)
Principle of Mutual Oblivion (PoMO) Prinzip der gegenseitigen Nichtbeachtung
Integration Operation Data Integration Operation Data API (IODA) API
Nextlevel - Softwareuniversum - System-Umwelt-Diagramm - Domänenzerlegung (Anforderungen) - Flow
Design für den Entwurf - IOSP/PoMO/IODA
None
None
Rolle Ressource System Portal Provider Domänenlogik
Domänenzerlegung: Dialoge und Interaktionen
Entwurf der obersten Ebene
Verfeinerung der Entwürfe
public bool[,] Initialize() { var world = gameOfLife.CreateEmptyWorld(); state.Put(world); return
world; }
None
public void CellChanged(int x, int y) { var world =
state.Get(); var newWorld = gameOfLife.ToggleCellAt(world, x, y); state.Put(newWorld); }
None
public void Start(Action<bool[,]> onUpdate) { timerProvider.Start(() => { var world
= state.Get(); var newWorld = gameOfLife.Evolution(world); state.Put(newWorld); synchronization.Sync(() => { onUpdate(newWorld); }); }); }
None
public void Stop() { timerProvider.Stop(); }
Fazit Clean Code entsteht nur durch methodisches Vorgehen
Fazit Clean Code entsteht nur durch methodisches Vorgehen Anforderungen müssen
zerlegt werden (Slicing, Domänenzerlegung)
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)
h#p://stefanlieser.teachable.com
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