SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
www.bnsit.pl 
Strategiczna refaktoryzacja 
Michał Bartyzel 
Mariusz Sieraczkiewicz
www.bnsit.pl 
To przede wszystkim wyzwanie organizacyjne, a w następnej kolejności techniczne 
Po pierwsze zatrzymaj dalsze psucie, po drugie naprawiaj 
Strategiczna refaktoryzacja
www.bnsit.pl 
#refactoring.com, refactoring to the patterns, clean code 
Przekształcenia kodu to za mało 
Strategiczna refaktoryzacja 
3
www.bnsit.pl 
MegaSoftwareCraftshmanshipper 
Strategiczna refaktoryzacja 
4 
http://pl.creepypasta.wikia.com/wiki/Plik:Kibole.jpeg
www.bnsit.pl 
Rodzaje refaktoryzacji 
Strategiczna refaktoryzacja 
5
www.bnsit.pl 
#Zidentyfikuj obszary refaktoryzacji 
•ARCHITECTURE ORIGIN 
•PROBLEM/BENEFITS/SOLUTIONS 
•ROOT CAUSE ANALYSIS 
•ARCHITECTURAL MANTRA 
•COMPLEXITY ANALYSIS 
•FEATHER’S QUADRANT 
•TRIBE KNOWLEDGE 
#Zatrzymaj degradację kodu 
•ORDERING 
•REFACTORYOUR ORGANIZATION 
•EXTRACT RESPONSIBILITY OBJECT 
•WORKAROUNDS 
•BRANCH BY ABSTRACTION 
•FEATURE PORTING 
•ANTICORRUPTION LAYER 
•BUBBLES 
#Utrzymuj architekturę przy życiu 
•ARCHITECTURE EVOLUTION 
•NATURAL COURSE OF REFACTORING 
Techniki 
Strategiczna refaktoryzacja 
6
www.bnsit.pl 
Kto to napisał? 
Kiedy to napisał? 
Czym się kierował? 
Jakie miał doświadczenie? 
W jakich warunkach działał? 
Ile miał czasu? 
Kto go rozliczał? 
Kontekst powstania tego kodu 
Strategiczna refaktoryzacja 
7
www.bnsit.pl 
Ćwiczenie 
Strategiczna refaktoryzacja 
8
www.bnsit.pl 
Problemy 
Korzyści 
Mapa problemy/korzyści/rozwiązanie 
Strategiczna refaktoryzacja 
9 
Co mówią programiści, architekci? 
Rozwiązanie
www.bnsit.pl 
Nie możemy zmieniać GUI 
Nie możemy wyjść z hosta serwującego aplikację 
Nie jesteśmy w stanie pracować w stylu klient-serwer 
Monolityczny kod, wielki model 
Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie 
Logika niezależna od GUI 
Różne kanały dostępu do logiki: web, iPad, client-sever 
Logika niezależna od GUI 
Różne kanały dostępu do logiki: web, iPad, client-sever 
Chcemy budować złożone, przekrojowe zapytania o dane 
Strategiczna refaktoryzacja 
10
www.bnsit.pl 
Nie możemy zmieniać GUI 
Nie możemy wyjść z hosta serwującego aplikację 
Nie jesteśmy w stanie pracować w stylu klient-serwer 
Monolityczny kod, wielki model 
Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie 
Logika niezależna od GUI 
Różne kanały dostępu do logiki: web, telefon, client-sever 
Różne kanały dostępu do logiki: web, telefon, client-sever 
Chcemy budować złożone, przekrojowe zapytania o dane 
Strategiczna refaktoryzacja 
11
www.bnsit.pl 
#BRAK WSPÓLNYCH ZASAD ODNOŚNIE ARCHITEKTURY 
#BRAK WSPÓLNYCH ZASAD ODNOŚNIE MECHANIZMÓW W SYSTEMIE: 
•jak/gdzie walidować; 
•jak/gdzie autoryzować; 
•utilsy; 
#SKOMPLIKOWANY PROCES PRACY Z REPOZYTORIUM – WIELE ŚRODOWISK, DUŻO MERGE’OWANIA 
Analiza – identyfikacja problemów 
Strategiczna refaktoryzacja 
12
www.bnsit.pl 
#BRAK WSPÓLNYCH ZASAD CZYTELNOŚCI KODU ORAZ BRAK ICH KODYFIKACJI; 
#BRAK PODZIAŁU NA MODUŁY NA POZIOMIE REPOZYTORIUM – podział techniczny a nie dziedzinowy 
#BRAK PROCESU WYMIANY WIEDZY O ARCHITEKTURZE 
Analiza – identyfikacja problemów 
Strategiczna refaktoryzacja 
13
www.bnsit.pl 
Root Cause Analysis 
Strategiczna refaktoryzacja 
14
www.bnsit.pl 
Mantra architektoniczna – bloki budujące 
Strategiczna refaktoryzacja 
15
www.bnsit.pl 
Mantra architektoniczna – model i kontekst 
Strategiczna refaktoryzacja 
16
www.bnsit.pl 
Jak powinno być? Co się powinno dziać? 
1.Przyjmuje request 
2.Dokonuje złożonej walidacji 
3.Składa dane do wywołania serwisu 
4.Wywołuje serwis 
5.Wynik pakuje w JSONa 
6.Określa kolejny widok 
Czego nie powinno być? 
#Prostej walidacji (gdyż do tego celu wykorzystujemy framework webowy) 
#Złożonego przetwarzania JSONa (z serwisu nie powinien przychodzić JSON) 
#Logiki dziedzinowej np. decydowanie na podstawie danych czy zlecenie ma być wykonane 
Blok budujący – View controller 
Strategiczna refaktoryzacja 
17
www.bnsit.pl 
Przeanalizuj metryki kodu 
Strategiczna refaktoryzacja 
18
www.bnsit.pl 
Wysoka złożoność/rzadkie zmiany Kod którego nie ruszamy 
Wysoka złożoność/częste zmiany Tu refaktoryzujemy 
Niska złożoność/rzadkie zmiany Utilsy, dobre do eksperymentów 
Niska złożoność/częste zmiany Heaven 
Co refaktoryzować? Kwadrant Feathersa 
Strategiczna refaktoryzacja 
19 
Dodatkowo: 
•wiedza plemienna 
•prognozy biznesu 
Częstość zmian 
Złożoność
www.bnsit.pl 
Repozytorium i wiedza plemienna 
#Co warto wziąć pod uwagę? 
•najczęściej zmieniające się fragmenty 
•fragmenty, na które raportowanych jest najwięcej błędów 
•fragmenty, z którymi programiści mają najwięcej problemów 
•fragmenty najmniej/najbardziej pokryte testami 
#Czy więcej pracujemy w infrastrukturze czy w dziedzinie? 
#Gdzie są duże pliki? 
#Czy pliki z commitów są rozsiane po całym repozytorium? 
Wiedza plemienna 
Strategiczna refaktoryzacja 
20
www.bnsit.pl 
Zatrzymaj degradację kodu
www.bnsit.pl 
#Koncepcje wysokiego poziomu są trudne 
#Do kiepskiego kodu ludzie się przyzwyczajają 
#Kłopot sprawia brak wiedzy biznesowej 
Uporządkowanie wystarcza 
#Nie za dużo kodu w jednym miejscu 
#Nie za dużo powiązań między klasami 
#Brak cyklicznych powiązań na wyższym poziomie 
Kilka kontrowersyjnych wniosków 
Strategiczna refaktoryzacja 
22
www.bnsit.pl 
Strategiczna refaktoryzacja 
23 
Promień Schwarzschilda
www.bnsit.pl 
#Zespoły deweloperskie 
#Zespoły testerów 
#Zespołu utrzymania 
#Zaangażowanie biznesu 
#Realność terminów 
#Obsługa zmian w wymaganiach 
Czemu przyjrzeć się na poziomie organizacyjnym? 
Strategiczna refaktoryzacja 
24
www.bnsit.pl 
Zespół ds. Trudnych i Beznadziejnych 
Strategiczna refaktoryzacja 
25
www.bnsit.pl 
#Segregujemy metody z pomiędzy interfejsy 
#Skupiamy się, na zatrzymaniu powstawania nowych zależności 
Extract Responsibility Interface/Object 
Strategiczna refaktoryzacja 
26
www.bnsit.pl 
if ( param == 4 ) { //workaround, do not touch! 
position.setX( position.getX() + 1 ); 
} 
Refaktoryzacja sposobu myślenia 
Strategiczna refaktoryzacja 
27
www.bnsit.pl 
public InvalidCartesianXPatch extends Position { 
private Position patchedPosition ; 
public InvalidCartesianXPatch( Position patchedPosition ) { 
this.patchedPosition = patchedPosition; 
} 
@Override 
public int getX() { 
return param == 4 ? patchedPosition.getX() + 1 : patchedPosition.getX(); 
} 
} 
Nazwij problem inaczej - Patch 
Strategiczna refaktoryzacja 
28
www.bnsit.pl 
public Position { 
// nowi klienci 
public static Position createPosition(int x, int y) { 
return new InvalidCartesianXPatch( new Position(x, y) ); 
} 
@Deprecated 
public Position(int x, int y) { 
//... 
} 
@Deprecated 
public Position( ... ) { } 
} 
Dostosuj oryginał 
Strategiczna refaktoryzacja 
29
www.bnsit.pl 
Branch by Abstraction 
Strategiczna refaktoryzacja 
30
www.bnsit.pl 
Feature Porting 
Strategiczna refaktoryzacja 
31
www.bnsit.pl 
A może nie refaktoryzować? 
Strategiczna refaktoryzacja 
32
www.bnsit.pl 
#Core domain – to co jest ściśle związane ze strategią firmy 
#Support domain – wspiera główną dziedzinę, ale bezpośrednio nie należy do niej 
#Generic domain – powszechnie występujące dziedziny 
Dziedziny 
Strategiczna refaktoryzacja 
33
www.bnsit.pl 
Anticoruption Layer 
Strategiczna refaktoryzacja 
34
www.bnsit.pl 
Strategiczna refaktoryzacja 
35 
Strategia Bubble Context
www.bnsit.pl 
Open Host Serivce 
Strategiczna refaktoryzacja 
36
www.bnsit.pl 
Zarządzanie ewolucją architektury
www.bnsit.pl 
Proces ewolucji architektury 
Strategiczna refaktoryzacja 
38 
Proces rozwoju architektury
Strategiczna refaktoryzacja 
39
Wiki 
Strategiczna refaktoryzacja 
40
Bugtracker 
Strategiczna refaktoryzacja 
41
Strategiczna refaktoryzacja 
42 
Everyday refactoring 
Strategic refactoring
www.bnsit.pl 
Strategiczna refaktoryzacja 
Michał Bartyzel 
Mariusz Sieraczkiewicz

Contenu connexe

Similaire à JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
Wydawnictwo Helion
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
Wydawnictwo Helion
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie II
Wydawnictwo Helion
 
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
UseLab
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
Wydawnictwo Helion
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
Wydawnictwo Helion
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
Wydawnictwo Helion
 
Najnowsze światowe trendy zarządzania projektami
Najnowsze światowe trendy zarządzania projektamiNajnowsze światowe trendy zarządzania projektami
Najnowsze światowe trendy zarządzania projektami
Janusz Pieklik
 

Similaire à JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel (20)

Bezpieczeństwo i optymalizacja kosztów - virtual Disaster Recovery
Bezpieczeństwo i optymalizacja kosztów - virtual Disaster RecoveryBezpieczeństwo i optymalizacja kosztów - virtual Disaster Recovery
Bezpieczeństwo i optymalizacja kosztów - virtual Disaster Recovery
 
Projekty internetowe: książka kucharska czyli... szczypta teorii i kocioł p...
Projekty internetowe: książka kucharska czyli... szczypta teorii i kocioł p...Projekty internetowe: książka kucharska czyli... szczypta teorii i kocioł p...
Projekty internetowe: książka kucharska czyli... szczypta teorii i kocioł p...
 
Refaktoryzacja
RefaktoryzacjaRefaktoryzacja
Refaktoryzacja
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...infraxstructure: Rafał Stańczak  "Postępujący rozwój infrastruktury na potrze...
infraxstructure: Rafał Stańczak "Postępujący rozwój infrastruktury na potrze...
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
PHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędziaPHP5. Obiekty, wzorce, narzędzia
PHP5. Obiekty, wzorce, narzędzia
 
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
 
20170928 why r_r jako główna platforma do zaawansowanej analityki w enterprise
20170928 why r_r jako główna platforma do zaawansowanej analityki w enterprise20170928 why r_r jako główna platforma do zaawansowanej analityki w enterprise
20170928 why r_r jako główna platforma do zaawansowanej analityki w enterprise
 
PHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie IIPHP i MySQL. Wprowadzenie. Wydanie II
PHP i MySQL. Wprowadzenie. Wydanie II
 
Od codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacjiOd codziennej higieny do strategicznej refaktoryzacji
Od codziennej higieny do strategicznej refaktoryzacji
 
Zasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznychZasady technicznej organizacji projektów programistycznych
Zasady technicznej organizacji projektów programistycznych
 
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
Paulina Rzymska, Marcin Piotrowski "Playmobile pl case study Polish IA Summit"
 
Redesign Playmobile.pl - Polish IA Summit 2011
Redesign Playmobile.pl - Polish IA Summit 2011Redesign Playmobile.pl - Polish IA Summit 2011
Redesign Playmobile.pl - Polish IA Summit 2011
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
 
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie IIPHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
PHP i MySQL. Tworzenie sklepów internetowych. Wydanie II
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
 
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
JDD2015: DDD w praktyce, czyli jak wdrażamy i uczymy się DDD w Allegro - Krzy...
 
Jak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training DayJak nadążyć za światem front-endu - WordPress Training Day
Jak nadążyć za światem front-endu - WordPress Training Day
 
Najnowsze światowe trendy zarządzania projektami
Najnowsze światowe trendy zarządzania projektamiNajnowsze światowe trendy zarządzania projektami
Najnowsze światowe trendy zarządzania projektami
 

JDD2014: Strategiczna refaktoryzacja - Michał Bartyzel

  • 1. www.bnsit.pl Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz
  • 2. www.bnsit.pl To przede wszystkim wyzwanie organizacyjne, a w następnej kolejności techniczne Po pierwsze zatrzymaj dalsze psucie, po drugie naprawiaj Strategiczna refaktoryzacja
  • 3. www.bnsit.pl #refactoring.com, refactoring to the patterns, clean code Przekształcenia kodu to za mało Strategiczna refaktoryzacja 3
  • 4. www.bnsit.pl MegaSoftwareCraftshmanshipper Strategiczna refaktoryzacja 4 http://pl.creepypasta.wikia.com/wiki/Plik:Kibole.jpeg
  • 5. www.bnsit.pl Rodzaje refaktoryzacji Strategiczna refaktoryzacja 5
  • 6. www.bnsit.pl #Zidentyfikuj obszary refaktoryzacji •ARCHITECTURE ORIGIN •PROBLEM/BENEFITS/SOLUTIONS •ROOT CAUSE ANALYSIS •ARCHITECTURAL MANTRA •COMPLEXITY ANALYSIS •FEATHER’S QUADRANT •TRIBE KNOWLEDGE #Zatrzymaj degradację kodu •ORDERING •REFACTORYOUR ORGANIZATION •EXTRACT RESPONSIBILITY OBJECT •WORKAROUNDS •BRANCH BY ABSTRACTION •FEATURE PORTING •ANTICORRUPTION LAYER •BUBBLES #Utrzymuj architekturę przy życiu •ARCHITECTURE EVOLUTION •NATURAL COURSE OF REFACTORING Techniki Strategiczna refaktoryzacja 6
  • 7. www.bnsit.pl Kto to napisał? Kiedy to napisał? Czym się kierował? Jakie miał doświadczenie? W jakich warunkach działał? Ile miał czasu? Kto go rozliczał? Kontekst powstania tego kodu Strategiczna refaktoryzacja 7
  • 9. www.bnsit.pl Problemy Korzyści Mapa problemy/korzyści/rozwiązanie Strategiczna refaktoryzacja 9 Co mówią programiści, architekci? Rozwiązanie
  • 10. www.bnsit.pl Nie możemy zmieniać GUI Nie możemy wyjść z hosta serwującego aplikację Nie jesteśmy w stanie pracować w stylu klient-serwer Monolityczny kod, wielki model Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie Logika niezależna od GUI Różne kanały dostępu do logiki: web, iPad, client-sever Logika niezależna od GUI Różne kanały dostępu do logiki: web, iPad, client-sever Chcemy budować złożone, przekrojowe zapytania o dane Strategiczna refaktoryzacja 10
  • 11. www.bnsit.pl Nie możemy zmieniać GUI Nie możemy wyjść z hosta serwującego aplikację Nie jesteśmy w stanie pracować w stylu klient-serwer Monolityczny kod, wielki model Brak możliwości selektywnego wyciągania danych. Zawsze trzeba to robić programistycznie Logika niezależna od GUI Różne kanały dostępu do logiki: web, telefon, client-sever Różne kanały dostępu do logiki: web, telefon, client-sever Chcemy budować złożone, przekrojowe zapytania o dane Strategiczna refaktoryzacja 11
  • 12. www.bnsit.pl #BRAK WSPÓLNYCH ZASAD ODNOŚNIE ARCHITEKTURY #BRAK WSPÓLNYCH ZASAD ODNOŚNIE MECHANIZMÓW W SYSTEMIE: •jak/gdzie walidować; •jak/gdzie autoryzować; •utilsy; #SKOMPLIKOWANY PROCES PRACY Z REPOZYTORIUM – WIELE ŚRODOWISK, DUŻO MERGE’OWANIA Analiza – identyfikacja problemów Strategiczna refaktoryzacja 12
  • 13. www.bnsit.pl #BRAK WSPÓLNYCH ZASAD CZYTELNOŚCI KODU ORAZ BRAK ICH KODYFIKACJI; #BRAK PODZIAŁU NA MODUŁY NA POZIOMIE REPOZYTORIUM – podział techniczny a nie dziedzinowy #BRAK PROCESU WYMIANY WIEDZY O ARCHITEKTURZE Analiza – identyfikacja problemów Strategiczna refaktoryzacja 13
  • 14. www.bnsit.pl Root Cause Analysis Strategiczna refaktoryzacja 14
  • 15. www.bnsit.pl Mantra architektoniczna – bloki budujące Strategiczna refaktoryzacja 15
  • 16. www.bnsit.pl Mantra architektoniczna – model i kontekst Strategiczna refaktoryzacja 16
  • 17. www.bnsit.pl Jak powinno być? Co się powinno dziać? 1.Przyjmuje request 2.Dokonuje złożonej walidacji 3.Składa dane do wywołania serwisu 4.Wywołuje serwis 5.Wynik pakuje w JSONa 6.Określa kolejny widok Czego nie powinno być? #Prostej walidacji (gdyż do tego celu wykorzystujemy framework webowy) #Złożonego przetwarzania JSONa (z serwisu nie powinien przychodzić JSON) #Logiki dziedzinowej np. decydowanie na podstawie danych czy zlecenie ma być wykonane Blok budujący – View controller Strategiczna refaktoryzacja 17
  • 18. www.bnsit.pl Przeanalizuj metryki kodu Strategiczna refaktoryzacja 18
  • 19. www.bnsit.pl Wysoka złożoność/rzadkie zmiany Kod którego nie ruszamy Wysoka złożoność/częste zmiany Tu refaktoryzujemy Niska złożoność/rzadkie zmiany Utilsy, dobre do eksperymentów Niska złożoność/częste zmiany Heaven Co refaktoryzować? Kwadrant Feathersa Strategiczna refaktoryzacja 19 Dodatkowo: •wiedza plemienna •prognozy biznesu Częstość zmian Złożoność
  • 20. www.bnsit.pl Repozytorium i wiedza plemienna #Co warto wziąć pod uwagę? •najczęściej zmieniające się fragmenty •fragmenty, na które raportowanych jest najwięcej błędów •fragmenty, z którymi programiści mają najwięcej problemów •fragmenty najmniej/najbardziej pokryte testami #Czy więcej pracujemy w infrastrukturze czy w dziedzinie? #Gdzie są duże pliki? #Czy pliki z commitów są rozsiane po całym repozytorium? Wiedza plemienna Strategiczna refaktoryzacja 20
  • 22. www.bnsit.pl #Koncepcje wysokiego poziomu są trudne #Do kiepskiego kodu ludzie się przyzwyczajają #Kłopot sprawia brak wiedzy biznesowej Uporządkowanie wystarcza #Nie za dużo kodu w jednym miejscu #Nie za dużo powiązań między klasami #Brak cyklicznych powiązań na wyższym poziomie Kilka kontrowersyjnych wniosków Strategiczna refaktoryzacja 22
  • 23. www.bnsit.pl Strategiczna refaktoryzacja 23 Promień Schwarzschilda
  • 24. www.bnsit.pl #Zespoły deweloperskie #Zespoły testerów #Zespołu utrzymania #Zaangażowanie biznesu #Realność terminów #Obsługa zmian w wymaganiach Czemu przyjrzeć się na poziomie organizacyjnym? Strategiczna refaktoryzacja 24
  • 25. www.bnsit.pl Zespół ds. Trudnych i Beznadziejnych Strategiczna refaktoryzacja 25
  • 26. www.bnsit.pl #Segregujemy metody z pomiędzy interfejsy #Skupiamy się, na zatrzymaniu powstawania nowych zależności Extract Responsibility Interface/Object Strategiczna refaktoryzacja 26
  • 27. www.bnsit.pl if ( param == 4 ) { //workaround, do not touch! position.setX( position.getX() + 1 ); } Refaktoryzacja sposobu myślenia Strategiczna refaktoryzacja 27
  • 28. www.bnsit.pl public InvalidCartesianXPatch extends Position { private Position patchedPosition ; public InvalidCartesianXPatch( Position patchedPosition ) { this.patchedPosition = patchedPosition; } @Override public int getX() { return param == 4 ? patchedPosition.getX() + 1 : patchedPosition.getX(); } } Nazwij problem inaczej - Patch Strategiczna refaktoryzacja 28
  • 29. www.bnsit.pl public Position { // nowi klienci public static Position createPosition(int x, int y) { return new InvalidCartesianXPatch( new Position(x, y) ); } @Deprecated public Position(int x, int y) { //... } @Deprecated public Position( ... ) { } } Dostosuj oryginał Strategiczna refaktoryzacja 29
  • 30. www.bnsit.pl Branch by Abstraction Strategiczna refaktoryzacja 30
  • 31. www.bnsit.pl Feature Porting Strategiczna refaktoryzacja 31
  • 32. www.bnsit.pl A może nie refaktoryzować? Strategiczna refaktoryzacja 32
  • 33. www.bnsit.pl #Core domain – to co jest ściśle związane ze strategią firmy #Support domain – wspiera główną dziedzinę, ale bezpośrednio nie należy do niej #Generic domain – powszechnie występujące dziedziny Dziedziny Strategiczna refaktoryzacja 33
  • 34. www.bnsit.pl Anticoruption Layer Strategiczna refaktoryzacja 34
  • 35. www.bnsit.pl Strategiczna refaktoryzacja 35 Strategia Bubble Context
  • 36. www.bnsit.pl Open Host Serivce Strategiczna refaktoryzacja 36
  • 38. www.bnsit.pl Proces ewolucji architektury Strategiczna refaktoryzacja 38 Proces rozwoju architektury
  • 42. Strategiczna refaktoryzacja 42 Everyday refactoring Strategic refactoring
  • 43. www.bnsit.pl Strategiczna refaktoryzacja Michał Bartyzel Mariusz Sieraczkiewicz