die s.o.l.i.d-prinzipien für c# entwickler · pdf fileagenda 3 22.06.2016 developer week...
TRANSCRIPT
![Page 1: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/1.jpg)
BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA
HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH
Die S.O.L.I.D-Prinzipien
für C# Entwickler
Thomas Claudius Huber@ThomasClaudiusH
![Page 2: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/2.jpg)
Thomas Claudius Huber
Developer Week 2016 - Nürnberg - Thomas Claudius Huber2 22.06.2016
Principal Consultant @ Trivadis AGCloud Solutions
Developer, Trainer, Architect
Microsoft MVP for Windows Development
Spezialisiert in WPF, Angular 2, C#, .NET, Azure
What else:
Pluralsight-Autor, Buchautor
Fussball, Skaten, Fitness, Gitarre
![Page 3: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/3.jpg)
Agenda
Developer Week 2016 - Nürnberg - Thomas Claudius Huber3 22.06.2016
1. Die S.O.L.I.D.-Prinzipien
2. Umsetzung in C#
3. Summary
![Page 4: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/4.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber4 22.06.2016
1. Die S.O.L.I.D.-Prinzipien
![Page 5: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/5.jpg)
S.O.L.I.D.-Prinzipien
Developer Week 2016 - Nürnberg - Thomas Claudius Huber5 22.06.2016
Fünf Prinzipien für wartbaren Code
Nicht an eine Technologie gebunden
Single
Responsibility
Open /
Closed
Liskov
Substitution
Interface
Segregation
Dependency
Inversion
![Page 6: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/6.jpg)
Wo hat das Ganze seinen Ursprung
Developer Week 2016 - Nürnberg - Thomas Claudius Huber6 22.06.2016
S.O.L.I.D.-Acronym wurde von Michael Feathers eingeführt
– Basierend auf den ersten 5 objektorientierten Prinzipien von Robert C. Martin
Werden die fünf Prinzipien angewendet, soll der Code
wartbarer und leicht erweiterbar sein
![Page 7: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/7.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber7 22.06.2016
2. Umsetzung in C#
![Page 8: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/8.jpg)
Ein Demo-Projekt
Developer Week 2016 - Nürnberg - Thomas Claudius Huber8 22.06.2016
Ein einfacher File-Reader
Let’s «hack» it down
Demo
![Page 9: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/9.jpg)
Single Responsibility Principle (SRP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber9 22.06.2016
“There is one and only one reason
to change a class”
Demo
![Page 10: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/10.jpg)
Single Responsibility Principle (SRP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber10 22.06.2016
Weitere Beispiele
![Page 11: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/11.jpg)
Single Responsibility Principle (SRP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber11 22.06.2016
Nur eine Verantwortlichkeit
Gilt für alle Objekte: Assemblies, Klassen, Methoden
Sorgt für wartbare, kleine Klassen
![Page 12: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/12.jpg)
Open/Closed Principle (OCP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber12 22.06.2016
“Software entities (classes, modules,
functions, etc.) should be open for
extension, but closed for
modification”
![Page 13: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/13.jpg)
Open/Closed Principle (OCP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber13 22.06.2016
Open for Extension Closed for Modification
Die Klasse kann um neue
Anforderungen erweitert werden
Bestehender Code wird
nicht verändert
![Page 14: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/14.jpg)
Open/Closed Principle (OCP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber14 22.06.2016
Änderungen durch Hinzufügen von neuem Code
Änderungen NICHT durch Änderung von altem Code
Der Schlüssel liegt in der Abstraktion
Demo
![Page 15: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/15.jpg)
Open/Closed Principle (OCP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber15 22.06.2016
Bestehender Code wird nicht geändert
Unit Tests bleiben grün
Manchmal schwierig was virtual ist und was nicht
![Page 16: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/16.jpg)
Liskov Substitution Principle (LSP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber16 22.06.2016
“Objects in a program should be
replaceable with instances of their
subtypes without altering the
correctness of that program”
![Page 17: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/17.jpg)
Liskov Substitution Principle (LSP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber17 22.06.2016
Eine Erweiterung von OCP
Sicherstellen, dass abgeleitete Klassen das Verhalten der
Basisklasse nicht verändern
Demo
![Page 18: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/18.jpg)
Interface Segregation Principle (ISP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber18 22.06.2016
“Clients should not be forced to
depend upon interfaces that they do
not use”
![Page 19: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/19.jpg)
Interface Segregation Principle (ISP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber19 22.06.2016
Grosse Interfaces = mehr Abhängigkeiten
Interface Pollution (Clients müssen Member implementieren,
welche sie nicht brauchen)
Lösung: Keine „fat“ Interfaces, stattdessen viele kleine
Interfaces
Demo
![Page 20: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/20.jpg)
Dependency Inversion Principle (DIP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber20 22.06.2016
“Depend upon Abstractions. Do not
depend upon concretions”
![Page 21: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/21.jpg)
Dependency Inversion Principle (DIP)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber21 22.06.2016
Abstraktion durch Interfaces / abstrakte Basisklassen
Code lässt sich ohne Implementierungen testen
– Mocking von Interfaces
Üblich wird zum Auflösen der Interfaces ein DI-Container
genutzt
Demo
![Page 22: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/22.jpg)
Developer Week 2016 - Nürnberg - Thomas Claudius Huber22 22.06.2016
3. Summary
![Page 23: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/23.jpg)
Anzeichen auf «stinkenden» Code
Developer Week 2016 - Nürnberg - Thomas Claudius Huber23 22.06.2016
If-Statement, welches Typen unterscheidet -> OCP
Interface-Methoden, welche in vielen Fällen nicht
implementiert werden müssen -> ISP
FAT Interfaces -> ISP
Methodennamen wie: UpdateAndSaveCustomer(),
VerifyAndSaveData() -> SRP
Klassennamen wie CustomerManager -> SRP
![Page 24: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/24.jpg)
S.O.L.I.D.-Summary
Developer Week 2016 - Nürnberg - Thomas Claudius Huber24 22.06.2016
Hilft wartbaren Code zu schreiben
Projekte bekommen eine gute Struktur
Es sind lediglich Prinzipien
– Nicht übertreiben.
![Page 25: Die S.O.L.I.D-Prinzipien für C# Entwickler · PDF fileAgenda 3 22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber 1. Die S.O.L.I.D.-Prinzipien 2. Umsetzung in C# 3](https://reader034.vdocuments.site/reader034/viewer/2022051720/5a78d4dd7f8b9aa17b8d38e2/html5/thumbnails/25.jpg)
Fragen?Thomas Claudius Huber
@thomasclaudiush
www.thomasclaudiushuber.com
22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber25