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
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nextlevel Clean Code Development
Session auf der Developer Week DWX 2017.
Stefan Lieser
June 28, 2017
More Decks by Stefan Lieser
See All by Stefan Lieser
Lernen durch Üben
slieser
0
650
Other Decks in Programming
See All in Programming
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
New "Type" system on PicoRuby
pocke
1
850
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
190
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
740
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
Creating Composable Callables in Contemporary C++
rollbear
0
110
CSC307 Lecture 17
javiergs
PRO
0
320
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
220
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
110
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
330
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
130
Featured
See All Featured
Practical Orchestrator
shlominoach
191
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
BBQ
matthewcrist
89
10k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
230
How to make the Groovebox
asonas
2
2.2k
Speed Design
sergeychernyshev
33
1.8k
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