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
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
2
770
AIコーディングAgentとの向き合い方
eycjur
0
240
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
380
兎に角、コードレビュー
mitohato14
0
160
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
100
TanStack DB ~状態管理の新しい考え方~
bmthd
2
360
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
9
2.7k
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
150
OSS開発者という働き方
andpad
5
1.4k
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
180
【第4回】関東Kaggler会「Kaggleは執筆に役立つ」
mipypf
0
940
ワープロって実は計算機で
pepepper
2
1.4k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
200k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Music & Morning Musume
bryan
46
6.8k
How to Ace a Technical Interview
jacobian
279
23k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Faster Mobile Websites
deanohume
309
31k
Why Our Code Smells
bkeepers
PRO
339
57k
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