Die SOLID-Prinzipien

25
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

Transcript of Die SOLID-Prinzipien

Page 1: Die SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

Developer Week 2016 - Nürnberg - Thomas Claudius Huber4 22.06.2016

1. Die S.O.L.I.D.-Prinzipien

Page 5: Die SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

Developer Week 2016 - Nürnberg - Thomas Claudius Huber7 22.06.2016

2. Umsetzung in C#

Page 8: Die SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

Single Responsibility Principle (SRP)

Developer Week 2016 - Nürnberg - Thomas Claudius Huber10 22.06.2016

Weitere Beispiele

Page 11: Die SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

Developer Week 2016 - Nürnberg - Thomas Claudius Huber22 22.06.2016

3. Summary

Page 23: Die SOLID-Prinzipien

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 SOLID-Prinzipien

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 SOLID-Prinzipien

Fragen?Thomas Claudius Huber

@thomasclaudiush

[email protected]

www.thomasclaudiushuber.com

22.06.2016 Developer Week 2016 - Nürnberg - Thomas Claudius Huber25