Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

of

Advanced Refactoring Patterns - Dev Day 2018 Slide 1 Advanced Refactoring Patterns - Dev Day 2018 Slide 2 Advanced Refactoring Patterns - Dev Day 2018 Slide 3 Advanced Refactoring Patterns - Dev Day 2018 Slide 4 Advanced Refactoring Patterns - Dev Day 2018 Slide 5 Advanced Refactoring Patterns - Dev Day 2018 Slide 6 Advanced Refactoring Patterns - Dev Day 2018 Slide 7 Advanced Refactoring Patterns - Dev Day 2018 Slide 8 Advanced Refactoring Patterns - Dev Day 2018 Slide 9 Advanced Refactoring Patterns - Dev Day 2018 Slide 10 Advanced Refactoring Patterns - Dev Day 2018 Slide 11 Advanced Refactoring Patterns - Dev Day 2018 Slide 12 Advanced Refactoring Patterns - Dev Day 2018 Slide 13 Advanced Refactoring Patterns - Dev Day 2018 Slide 14 Advanced Refactoring Patterns - Dev Day 2018 Slide 15 Advanced Refactoring Patterns - Dev Day 2018 Slide 16 Advanced Refactoring Patterns - Dev Day 2018 Slide 17 Advanced Refactoring Patterns - Dev Day 2018 Slide 18 Advanced Refactoring Patterns - Dev Day 2018 Slide 19 Advanced Refactoring Patterns - Dev Day 2018 Slide 20 Advanced Refactoring Patterns - Dev Day 2018 Slide 21 Advanced Refactoring Patterns - Dev Day 2018 Slide 22 Advanced Refactoring Patterns - Dev Day 2018 Slide 23 Advanced Refactoring Patterns - Dev Day 2018 Slide 24 Advanced Refactoring Patterns - Dev Day 2018 Slide 25 Advanced Refactoring Patterns - Dev Day 2018 Slide 26 Advanced Refactoring Patterns - Dev Day 2018 Slide 27 Advanced Refactoring Patterns - Dev Day 2018 Slide 28 Advanced Refactoring Patterns - Dev Day 2018 Slide 29 Advanced Refactoring Patterns - Dev Day 2018 Slide 30 Advanced Refactoring Patterns - Dev Day 2018 Slide 31 Advanced Refactoring Patterns - Dev Day 2018 Slide 32 Advanced Refactoring Patterns - Dev Day 2018 Slide 33 Advanced Refactoring Patterns - Dev Day 2018 Slide 34 Advanced Refactoring Patterns - Dev Day 2018 Slide 35 Advanced Refactoring Patterns - Dev Day 2018 Slide 36 Advanced Refactoring Patterns - Dev Day 2018 Slide 37 Advanced Refactoring Patterns - Dev Day 2018 Slide 38 Advanced Refactoring Patterns - Dev Day 2018 Slide 39 Advanced Refactoring Patterns - Dev Day 2018 Slide 40
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

0 Likes

Share

Download to read offline

Advanced Refactoring Patterns - Dev Day 2018

Download to read offline

Folien des Vortrags zu Advanced Refactoring Patterns vom 24.04.2018 Dev Day 2018.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Advanced Refactoring Patterns - Dev Day 2018

  1. 1. Refactoring bezeichnet in der Software-Entwicklung die manuelle oder automatisierte Strukturverbesserung von Quelltexten unter Beibehaltung des beobachtbaren Programmverhaltens. Dabei sollen die Lesbarkeit, Verständlichkeit, Wartbarkeit und Erweiterbarkeit verbessert werden, mit dem Ziel, den jeweiligen Aufwand für Fehleranalyse und funktionale Erweiterungen deutlich zu senken. Quelle: https://de.wikipedia.org/wiki/Refactoring
  2. 2. …is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. Its heart is a series of small behavior preserving transformations. Each transformation (called a “refactoring”) does little, but a sequence of transformations can produce a significant restructuring. Since each refactoring is small, it’s less likely to go wrong. The system is kept fully working after each small refactoring, reducing the chances that a system can get seriously broken during the restructuring. refactoring.com
  3. 3. Add Parameter Introduce Class Annotation Replace Conditional with Polymorphism Change Bidirectional Association to Unidirectional Introduce Expression Builder Replace Constructor with Factory Method Change Reference to Value Introduce Foreign Method Replace Data Value with Object Change Unidirectional Association to Bidirectional Introduce Gateway Replace Delegation With Hierarchy Change Value to Reference Introduce Local Extension Replace Delegation with Inheritance Collapse Hierarchy Introduce Named Parameter Replace Dynamic Receptor with Dynamic Method Definition Consolidate Conditional Expression Introduce Null Object Replace Error Code with Exception Consolidate Duplicate Conditional Fragments Introduce Parameter Object Replace Exception with Test Decompose Conditional Isolate Dynamic Receptor Replace Hash with Object Duplicate Observed Data Lazily Initialized Attribute Replace Inheritance with Delegation Dynamic Method Definition Move Eval from Runtime to Parse Time Replace Loop with Collection Closure Method Eagerly Initialized Attribute Move Field Replace Magic Number with Symbolic Constant Encapsulate Collection Move Method Replace Method with Method Object Encapsulate Downcast Parameterize Method Replace Nested Conditional with Guard Clauses Encapsulate Field Preserve Whole Object Replace Parameter with Explicit Methods Extract Class Pull Up Constructor Body Replace Parameter with Method Extract Interface Pull Up Field Replace Record with Data Class Extract Method Pull Up Method Replace Subclass with Fields Extract Module Push Down Field Replace Temp with Chain Extract Subclass Push Down Method Replace Temp with Query Extract Superclass Recompose Conditional Replace Type Code with Class Extract Surrounding Method Remove Assignments to Parameters Replace Type Code with Module Extension Extract Variable Remove Control Flag Replace Type Code With Polymorphism Form Template Method Remove Middle Man Replace Type Code with State/Strategy Hide Delegate Remove Named Parameter Replace Type Code with Subclasses Hide Method Remove Parameter Self Encapsulate Field Inline Class Remove Setting Method Separate Query from Modifier Inline Method Remove Unused Default Parameter Split Temporary Variable Inline Module Rename Method Substitute Algorithm Inline Temp Replace Abstract Superclass with Module Introduce Assertion Replace Array with Object refactoring.com
  4. 4. “Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.”
  5. 5. 1. Quellcode einchecken. 2. Einen Überblick darüber verschaffen was geändert werden soll. 3. Mindestens einen Test schreiben der das bestehende Verhalten charakterisiert. 4. Refaktorisieren 5. Prüfen ob sich das Verhalten verändert hat.
  6. 6. Situationen „Ich weiß nicht was mein Code macht, soll diesen Zustand aber ändern.“ Vorgehen Wir schreiben einen Test ohne Asserts und sehen uns anhand der Codeabdeckung an was passiert.
  7. 7. Situationen „Ich will das mein Code sich nach den Änderungen so verhält wie vorher.“ Vorgehen Man schreibt oder generiert einen oder mehrere Tests um das Verhalten zu prüfen.
  8. 8. Situationen „Ich muss Interna einer Klasse manipulieren um etwas testen zu können, will dies aber nur für die Tests tun.“
  9. 9. ?!?Test
  10. 10. Accessor ?!?Test
  11. 11. Situationen „Wir haben keine Zeit für umfassende Refactorings.“ „Ich möchte Code testgetrieben in einer untestbaren Umgebung umsetzen.“ „Ich kann das Problem durch reines Hinzufügen von Code lösen.“
  12. 12. ?!? Test
  13. 13. ?!? Test Sprout
  14. 14. ?!? Test Sprout
  15. 15. Situationen „Ich muss eine vorhandene Schnittstelle ändern, möchte das Verhalten aber nicht unvorhergesehen schädigen.“
  16. 16. ?!? ?!? ?!? ?!?
  17. 17. ?!? ?!? ?!? ?!?
  18. 18. ?!? ?!? ?!? ?!?
  19. 19. ?!? ?!? ?!? ?!?
  20. 20. ?!? ?!? ?!? ?!?
  21. 21. Situationen „Ich habe eine Klasse/Methode die viel zu komplex ist.“ Vorgehen Wir lagern komplexe Methoden in eigene Klassen aus und brechen sie dort in weitere Methoden auf.
  22. 22. ?!?
  23. 23. ?!??!?
  24. 24. ?!? ?!? A B C D
  25. 25. Situationen „Ich muss ein altes System ablösen, es ist aber so komplex, dass ich dies nicht mit einen Mal tun kann. “ Vorgehen Wir bauen das neue System als Sprouts, ziehen schrittweise die Funktionalität aus dem alten und entfernen all die Teile die nicht mehr im alten gebraucht werden.
  26. 26. ?!? ?!? ?!?
  27. 27. !!! !!! ?!? ?!? ?!?
  28. 28. !!! !!! ?!? ?!? ?!?
  29. 29. !!! !!! ?!? ?!? ?!?
  30. 30. !!! !!! ?!? ?!?
  31. 31. !!! !!! ?!? ?!?
  32. 32. Quelle: https://martinfowler.com/bliki/RefactoringMalapropism.html Refactoring • Kleine lokale Änderungen. • Schnelle Anpassungen mit geringen Auswirkungen auf andere. • Können ohne größere Absprache durchgeführt werden. • Keine tiefgreifenden architekturellen Anpassungen in bestehendem Code. Restructuring • Großflächige architekturelle Anpassungen die sich auf die Gesamtapplikation auswirken können. • Können andere Entwickler behindern. • Sollten nicht ohne Absprache und Planung durchgeführt werden.

Folien des Vortrags zu Advanced Refactoring Patterns vom 24.04.2018 Dev Day 2018.

Views

Total views

576

On Slideshare

0

From embeds

0

Number of embeds

433

Actions

Downloads

3

Shares

0

Comments

0

Likes

0

×