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
940
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
610
Other Decks in Programming
See All in Programming
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
680
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
1
12k
Discover Metal 4
rei315
2
120
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
5
1.1k
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
700
C++20 射影変換
faithandbrave
0
560
初学者でも今すぐできる、Claude Codeの生産性を10倍上げるTips
s4yuba
14
9.3k
#QiitaBash MCPのセキュリティ
ryosukedtomita
0
910
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
260
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
620
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
600
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Facilitating Awesome Meetings
lara
54
6.4k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Writing Fast Ruby
sferik
628
62k
Practical Orchestrator
shlominoach
188
11k
Code Review Best Practice
trishagee
69
18k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
730
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
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