Die SOLID-Prinzipien

  • View
    122

  • Download
    0

Embed Size (px)

Text of Die SOLID-Prinzipien

  • BASEL BERN BRUGG DSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENEVA

    HAMBURG COPENHAGEN LAUSANNE MUNICH STUTTGART VIENNA ZURICH

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

    fr C# Entwickler

    Thomas Claudius Huber@ThomasClaudiusH

  • Thomas Claudius Huber

    Developer Week 2016 - Nrnberg - 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

  • Agenda

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber3 22.06.2016

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

    2. Umsetzung in C#

    3. Summary

  • Developer Week 2016 - Nrnberg - Thomas Claudius Huber4 22.06.2016

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

  • S.O.L.I.D.-Prinzipien

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber5 22.06.2016

    Fnf Prinzipien fr wartbaren Code

    Nicht an eine Technologie gebunden

    Single Responsibility

    Open / Closed

    Liskov Substitution

    Interface Segregation

    Dependency Inversion

  • Wo hat das Ganze seinen Ursprung

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber6 22.06.2016

    S.O.L.I.D.-Acronym wurde von Michael Feathers eingefhrt

    Basierend auf den ersten 5 objektorientierten Prinzipien von Robert C. Martin

    Werden die fnf Prinzipien angewendet, soll der Code

    wartbarer und leicht erweiterbar sein

  • Developer Week 2016 - Nrnberg - Thomas Claudius Huber7 22.06.2016

    2. Umsetzung in C#

  • Ein Demo-Projekt

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber8 22.06.2016

    Ein einfacher File-Reader

    Lets hack it down

    Demo

  • Single Responsibility Principle (SRP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber9 22.06.2016

    There is one and only one reason

    to change a class

    Demo

  • Single Responsibility Principle (SRP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber10 22.06.2016

    Weitere Beispiele

  • Single Responsibility Principle (SRP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber11 22.06.2016

    Nur eine Verantwortlichkeit

    Gilt fr alle Objekte: Assemblies, Klassen, Methoden

    Sorgt fr wartbare, kleine Klassen

  • Open/Closed Principle (OCP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber12 22.06.2016

    Software entities (classes, modules,

    functions, etc.) should be open for

    extension, but closed for

    modification

  • Open/Closed Principle (OCP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber13 22.06.2016

    Open for Extension Closed for Modification

    Die Klasse kann um neue

    Anforderungen erweitert werden

    Bestehender Code wird

    nicht verndert

  • Open/Closed Principle (OCP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber14 22.06.2016

    nderungen durch Hinzufgen von neuem Code

    nderungen NICHT durch nderung von altem Code

    Der Schlssel liegt in der Abstraktion

    Demo

  • Open/Closed Principle (OCP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber15 22.06.2016

    Bestehender Code wird nicht gendert

    Unit Tests bleiben grn

    Manchmal schwierig was virtual ist und was nicht

  • Liskov Substitution Principle (LSP)

    Developer Week 2016 - Nrnberg - 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

  • Liskov Substitution Principle (LSP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber17 22.06.2016

    Eine Erweiterung von OCP

    Sicherstellen, dass abgeleitete Klassen das Verhalten der

    Basisklasse nicht verndern

    Demo

  • Interface Segregation Principle (ISP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber18 22.06.2016

    Clients should not be forced to

    depend upon interfaces that they do

    not use

  • Interface Segregation Principle (ISP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber19 22.06.2016

    Grosse Interfaces = mehr Abhngigkeiten

    Interface Pollution (Clients mssen Member implementieren,

    welche sie nicht brauchen)

    Lsung: Keine fat Interfaces, stattdessen viele kleine

    Interfaces

    Demo

  • Dependency Inversion Principle (DIP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber20 22.06.2016

    Depend upon Abstractions. Do not

    depend upon concretions

  • Dependency Inversion Principle (DIP)

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber21 22.06.2016

    Abstraktion durch Interfaces / abstrakte Basisklassen

    Code lsst sich ohne Implementierungen testen

    Mocking von Interfaces

    blich wird zum Auflsen der Interfaces ein DI-Container

    genutzt

    Demo

  • Developer Week 2016 - Nrnberg - Thomas Claudius Huber22 22.06.2016

    3. Summary

  • Anzeichen auf stinkenden Code

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber23 22.06.2016

    If-Statement, welches Typen unterscheidet -> OCP

    Interface-Methoden, welche in vielen Fllen nicht

    implementiert werden mssen -> ISP

    FAT Interfaces -> ISP

    Methodennamen wie: UpdateAndSaveCustomer(),

    VerifyAndSaveData() -> SRP

    Klassennamen wie CustomerManager -> SRP

  • S.O.L.I.D.-Summary

    Developer Week 2016 - Nrnberg - Thomas Claudius Huber24 22.06.2016

    Hilft wartbaren Code zu schreiben

    Projekte bekommen eine gute Struktur

    Es sind lediglich Prinzipien

    Nicht bertreiben.

  • Fragen?Thomas Claudius Huber

    @thomasclaudiush

    thomas.huber@trivadis.com

    www.thomasclaudiushuber.com

    22.06.2016 Developer Week 2016 - Nrnberg - Thomas Claudius Huber25