![Page 1: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/1.jpg)
Od codziennej higieny kodu
do strategicznejrefaktoryzacji
@MichalBartyzelblog.gettingThingsProgrammed.pl
![Page 2: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/2.jpg)
Kod, który czyta się jak książkę
#CodeSpeaks2U
Tell, Don’t Ask
#CodeReadability
Samodokumentujący się kod
![Page 3: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/3.jpg)
Kluczem do #softwareCraftsmanship są umiejętności lingwistyczne
Nazywanie
![Page 4: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/4.jpg)
Co można zrobić z…
Zwiększamy efektywność zespołów projektowych4
Listą pracowników Ewidencją pracowników• Dodać pracownika• Usunąć pracownika• Usunąć wszystkich
pracowników
• Wciągnąć pracownika do ewidencji
• Wyciągnąć kartotekę pracownika• Oznaczyć urlop• Oznaczyć zwolnienie chorobowe• Wyciągnąć świadectwo pracy
![Page 5: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/5.jpg)
Programujesz to, co nazywaszZwiększamy efektywność zespołów projektowych5
List<Employee> employees...
//...
EmployeeFile employeeFile = findEmployeeFile( personalID );
employeeFile.getEmergencyContactInformation();
![Page 6: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/6.jpg)
A potem powstaje architektura Zwiększamy efektywność zespołów projektowych6
List<Employee> employees...
//...
EmployeeFile employeeFile = findEmployeeFile( personalID );
employeeFile.getEmergencyContactInformation();
![Page 7: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/7.jpg)
I dzieją się z nią dziwne rzeczyZwiększamy efektywność zespołów projektowych7
![Page 8: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/8.jpg)
Co chcemy zacząć zauważać?
Zwiększamy efektywność zespołów projektowych8
![Page 9: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/9.jpg)
Nazwa klasy cLOC
LocationManager 26 752
NetworkItem 10 955
TransferOperations 6 871
CalculatorsManager 4 325
MonitorManager 1 514
VTViewInvoker 48
ContactService 47
Address 34
DataRange 21
LoggedUserDetailsModel 13
Zwiększamy efektywność zespołów projektowych9
![Page 10: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/10.jpg)
Zwiększamy efektywność zespołów projektowych10
![Page 11: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/11.jpg)
Zwiększamy efektywność zespołów projektowych11
Klasy
![Page 12: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/12.jpg)
Zwiększamy efektywność zespołów projektowych12
Konwencje
![Page 13: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/13.jpg)
Zwiększamy efektywność zespołów projektowych13
Metody
![Page 14: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/14.jpg)
Extract Method?
ZmienneZwiększamy efektywność zespołów projektowych14
![Page 15: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/15.jpg)
Zwiększamy efektywność zespołów projektowych15
Axel Fontaine, Architecting for Continuous Deliveryhttp://2013.33degree.org/talk/show/51
Pakiety
![Page 16: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/16.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład
Refaktor.
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych16
![Page 17: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/17.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktor.
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych17
![Page 18: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/18.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktor. Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych18
![Page 19: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/19.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład tmp1, tmp2, tmp3
Refaktor. Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych19
![Page 20: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/20.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktor. Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych20
![Page 21: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/21.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych21
![Page 22: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/22.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych22
![Page 23: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/23.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych23
![Page 24: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/24.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell God Class Long Method Zmienna quasi-globalna
Przykład LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych24
![Page 25: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/25.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych25
![Page 26: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/26.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych26
![Page 27: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/27.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Wprowadź wzorzec architektoniczny
Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych27
![Page 28: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/28.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Wprowadź wzorzec architektoniczny
Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych28
![Page 29: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/29.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Wprowadź wzorzec architektoniczny
Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych29
![Page 30: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/30.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Zdefiniuj, podziel, zmień proces
Wprowadź wzorzec architektoniczny
Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych30
![Page 31: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/31.jpg)
Biznes ARCH Klasy Metody Zmienne
Smell Sexy Vision Big Ball of Mudhttp://laputan.org/mud/
God Class Long Method Zmienna quasi-globalna
Przykład ZSI, BI, DW Genreic Plugin Framework,Multi-Device Platform
LocationManager, NetworkItem
process, performOperation
tmp1, tmp2, tmp3
Refaktor. Zdefiniuj, podziel, zmień proces
Wprowadź wzorzec architektoniczny
Extract Classhttp://refactoring.com
Extract Methodhttp://refactoring.com
Split Temporary Variable http://refactoring.com
Brak umiejętności nazywaniaZwiększamy efektywność zespołów projektowych31
![Page 32: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/32.jpg)
#odpowiedzialność to rola/zadanie wyrażone nazwą
#dobraNazwa przychodzi z czasem
![Page 33: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/33.jpg)
Kryterium czytelności kodu: #testIvony
Code Speaks 2U
![Page 34: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/34.jpg)
public void add(Object element) { if (!readOnly) { int newSize = size + 1; if (newSize > elements.length) { Object[] newElements; newElements = new Object[elements.length + 10]; for (int i = 0; i < size; i++) { newElements[i] = elements[i]; } elements = newElements; } elements[size++] = element; }}
![Page 35: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/35.jpg)
public void add(Object element) {
if (readOnly) { return; } if (atCapacity()) { grow(); } addElement(element);}
![Page 36: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/36.jpg)
#CleanCode• Umieszczaj intencje w nazwach• Uwidaczniaj różnice• Stosuj nazwy, które da się wymówić• Unikaj dowcipnych nazw• Dbaj o pojedynczą odpowiedzialność• Unikaj dużej liczby parametrów• Stosuj Command-Query Separation• …
![Page 37: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/37.jpg)
![Page 38: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/38.jpg)
for (int dataType : types) { if (RowManagerHelper.isRawDataTypeCalculated( data, type.getType())) types.add(dataType); else { ID id = RowManagerHelper.getID(data, type, enType,
obj.getGroup().useDeprecatedXmlFiles()); if (id != null) { ids.add(id); if (id.getValue() != null) { IDFactory f = IDProviderFactory.getInstance()
.createProvider(pObj, element); list_id.addAll(idProvider.getAllIDs(id, 0)); } for (int j = i; j < (list_oid.size()); j++) { mapDaType.put(j, data); } i = list_id.size(); } }
![Page 39: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/39.jpg)
Zwiększamy efektywność zespołów projektowych39
public long insertDepartment (String CusId,String Employee, String FullName,String LastName,String FirstName,String PESEL, String ERProvince,String ERZipCode,String ERCountry, String ERStreetName,String ERBuildingNumber,String ERNumber, String ERPostOffice,String EmailAddress,String SMSNo, String CallNbr,String Status, String IStatus,String SMSStat, String WEBs, String XMLStatus,String BIStatus, String queue, String DasFlag, Date DateBirth,boolean bGenerate,String TAddress, String TCity,String sex,String Nationality,String NIP, Object Profile, String DefaultAccount, Sring address, String ADCity, String ADProvince, String ADZipCode, String ADCountry,String ADStreetName,String Number, String ADFlatNumber,String ADPostOffice,String ERAddress, String ERCity, String DProvince,String TZipCode,String TCountry, String TStreetName, String TBuildingNumber, String DFlatNumber, String TPostOffice, String PersonalId, String PassportNo) throws GenericException {
//...
![Page 40: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/40.jpg)
public class LDW_LocationCommonManager extends LDW_BaseService implements LDW_ILocationCommonManager {
private TStruct oTStruct;private TypeData oTypeData;private SolSubject _Subject;private SolUniqueSubject _UniqueSubject;private SolUniqueSubjectExcep _UniqueSubjectExcep;private SolCommunAddress _CommunAddress;private SolAddress _Address;private SolTransactions _Transactions;private SolStatusChanl _StatusChan;private UserContext uC;private UserContext_LDW uC_LDW;private SOLSegmentsUser _SegmentsUser;private LDWA_ISecurityString _oSecurity;private String _zoSdTransitionDate;private String _sSType;private String _zoInterimPasswordMask="";private String _zoInterimPassNoMasked="";private String _zoInterimPassMasked="";private Date _zoMigrationDate;private String _zoMigrationStage="";public int _iMigrationStage;
//...
Zwiększamy efektywność zespołów projektowych40
![Page 41: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/41.jpg)
if (!r.IsDataRangeDoNull() && !r.IsDataRangeOdNull() && ((r.DataRangeOd.Day != yearRow.Miesiac.Day && r.DataRangeOd.Day != yearRow.Miesiac.AddMonths(1).Day) || (r.DataRangeDo.Day != yearRow.Miesiac.Day && r.DataRangeDo.Day != yearRow.Miesiac.AddMonths(1).Day)))
//...
Zwiększamy efektywność zespołów projektowych41
![Page 42: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/42.jpg)
if (cardId == null) throw new NullPointerException(
"cardId is null");
if (cardId.getCardNo() == null) throw new NullPointerException(
"card in cardNo is null");
if (cardId.getCardNo().getCardNoId() == null) throw new NullPointerException(
"cardNoId is null");
Zwiększamy efektywność zespołów projektowych42
![Page 43: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/43.jpg)
#testIvony Posłuchaj czytanego kodu:
1. Zrozumiałe -> czytelny2. Niezrozumiałe -> nieczytelny
![Page 44: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/44.jpg)
#nieczytelny
• Próbujesz rozwiązać zagadkę logiczną
• Powtarzasz kod w myślach
• Zaczynasz mówić na głos
#czytelny
• Wyobrażasz sobie historię, która się dzieje
• Zupełnie jak w książce!
Zwiększamy efektywność zespołów projektowych44
![Page 45: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/45.jpg)
if ("".equals(m_Action) || "Cancel".equalsIgnoreCase(m_sAction) {
if ( actionCancelled( m_sAction ) ) {
![Page 46: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/46.jpg)
#uwazneKomentowanie
#scaffoldingRefactoring
1. Dodaj tymczasowe komentarze2. Nazwij warunki logiczne3. Pogrupuj zmienne leniwie4. Popraw wrażenia wizualne
![Page 47: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/47.jpg)
#NCR Natural Course of Refactoring: an intuitive #refactoringWorkflow #continuousRefactoring
Natural Course of Refactoring®
![Page 48: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/48.jpg)
![Page 49: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/49.jpg)
![Page 50: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/50.jpg)
![Page 51: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/51.jpg)
#smell Spaghetti Code`#book Clean Code, Code Complete
#smell Long Method
#book Implementation Patterns
#smell God Class
#book Refactoring
#smell Duplicated Code
#book Design Pattern
#smell Big Bull of Mud
#book POSA, PoEAA, DDD
#smell Architectural Drift
#res blogi, konferencje, listy
![Page 52: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/52.jpg)
#everydayRefactoring
#strategicRefactoring
![Page 53: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/53.jpg)
Niektóre fragmenty kodu zawsze będą cuchnąć. Naucz się z tym żyć #codeSmell
Refaktoryzować?
![Page 54: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/54.jpg)
High complexity/
Seldom changes
Don’t touch it.
High complexity/ Frequent changes
Apply strategic refactoring
Low complexity/ Seldom changes
Utils, good for experiments
Low complexity/Frequen
t changes
Heaven
Strategiczna refaktoryzacja54
Confront with:• team opinions
• business strategy
Frequency of changes
Complexity
![Page 55: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/55.jpg)
Core Domain?
![Page 56: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/56.jpg)
![Page 57: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/57.jpg)
Core Domain
1 programista, 6 miesięcy, PHP
![Page 58: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/58.jpg)
Nową funkcjonalność rozwijaj osobno w powiązanym kontekście
Strategiczna refaktoryzacja58
Bubble Context
![Page 59: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/59.jpg)
#refaktoryzacja to przede wszystkim wyzwanie organizacyjne, a nie techniczne #strategicRefactoring
Zarządzanie
![Page 60: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/60.jpg)
#Action30• Nordea Bank AB rozwija eBankowość w
krajach bałtyckich• Biznes długo czeka na zlecone
funkcjonalności (do kilku miesięcy)
#cel Skrócić czas stworzenia nowej funkcjonalności do 30 dni
![Page 61: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/61.jpg)
…a o co chodzi?
![Page 62: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/62.jpg)
Nazwij problemy• Specjalizacja programistów• Multitasking• Duża ilość nieużywanego kodu• Leciwe technologie• Nadwyrężona odpowiedzialność widoków• Nieefektywne spotkania
![Page 63: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/63.jpg)
Mierz, co się da
![Page 64: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/64.jpg)
Pisz raporty• Redukcja wierszy kodu o 3%• Redukcja CC o 15%
Dla tej próbki kodu można by wykonać 29 testów mniej
– aproksymując po całym kodzie…• przeliczając wykonane testy na dni robocze…
![Page 65: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/65.jpg)
Włączaj ludzi• Kierownicy projektów proszą o więcej• Management zainteresowany Action-30• Programiści z innych zespołów
przyłączają się do inicjatywy• Wsparcie od całego managementu i top
managementu
![Page 66: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/66.jpg)
#refaktoryzacja sprawia kłopoty, bo robisz zbyt wiele rzeczy na raz
Małe kroki
![Page 67: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/67.jpg)
Programowanie jest #fajne
![Page 68: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/68.jpg)
//TODO: Wczytaj plik CSV
public String[][] readCSV(String filePath );
![Page 69: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/69.jpg)
Pojawił się błąd w bazie…
![Page 70: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/70.jpg)
To pewnie w serwisie…
![Page 71: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/71.jpg)
albo w widoku…
![Page 72: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/72.jpg)
albo w konfigu…
![Page 73: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/73.jpg)
albo w konfigu…
![Page 74: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/74.jpg)
Zasada zaangażowania
![Page 75: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/75.jpg)
Przyczyna błędu tkwi w…• Czyimś kodzie• Braku dostępu do usługi• Niejednoznacznych wymaganiach• Niewłaściwym przetestowaniu• Bibliotece• Słabej jakości kodzie oddziedziczonym • …
![Page 76: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/76.jpg)
DUŻE KROKI to Odczucie ***
![Page 77: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/77.jpg)
Najlepsze strategie skutecznych programistów
77Technika Małych Kroków
Krok := zmiana/dodanie instrukcji
![Page 78: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/78.jpg)
Najlepsze strategie skutecznych programistów
78Technika Małych Kroków
Małe Kroki w refaktoryzacji
Uważne komentowanieZmiany nazwLeniwe przestawianie zmiennychPrzyrostowe odtwarzanie testów
![Page 79: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/79.jpg)
?
![Page 80: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/80.jpg)
• ~500 dni szkoleniowych
• 80+ klientów: Agora, Grupa Allegro, ING Usługi Finansowe, Lufthansa Systems Polska, Nokia Siemens Networks, Opera Software, Samsung R&D Institute Poland, Nordea Bank AB (…)
• 8 projektów związanych ze zwinną transformacją
• 40+ artykułów w prasie branżowej
• 3 książki
@MichalBartyzelSzkoła Agile - Planowanie by Michał Bartyzel80
![Page 81: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/81.jpg)
enxoo bootcamp
https://goo.gl/9yZnY8
Skuteczna komunikacja to taka sama umiejętność jak jazda samochodem czy programowanie. Michał Bartyzel doskonale to pokazuje, rozkładając cały proces rozmowy na proste elementy. Dzięki temu czytelnik może nauczyć się rozpoznawać wzorce i dopasowywać odpowiednie techniki do kontekstu rozmowy. Autor posługuje się prostym i zrozumiałym językiem, uważnie wybiera najważniejsze aspekty tematów z pogranicza psychologii i coachingu. Narzędzia, które czytelnik dostaje do ręki, można od razu wykorzystać w pracy.
Krystian Kaczor, Agile Coach
![Page 82: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/82.jpg)
enxoo bootcamp
https://goo.gl/XfSLPQ
Sprawne sterowanie swoją uwagą, planowanie zadań czy umiejętność ich oszacowania to wiedza, której brakuje większości programistów. Często nie zdajemy sobie nawet sprawy z istnienia problemów spowalniających naszą pracę.W niniejszej książce Autor przedstawia bogaty wachlarz wyzwań stojących przed świadomym programistą. Nie poprzestaje na tym: wysuwa propozycje samodoskonalenia. Opisuje sprawdzone recepty pomagające zrozumieć codzienne problemy, rozbija je na czynniki pierwsze i przygotowuje do walki o lepszą organizację czasu.
Maciej Aniserowicz, twórca bloga devstyle.pl
![Page 83: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/83.jpg)
enxoo bootcamp
https://goo.gl/dXkfLS
This book includes a set of out-and-dried techniques for improving your cooperation with the business. The main goal of this publication is to give you two key skills: discovering the business needs, and managing the conversation in a way that will enable you to collect precise and useful information. First and foremost, I promote the first point of the Agile Manifesto: “Individuals and interactions over processes and tools.” Thus, if you tend to think that your clients do not know what they want, this book is exactly for you.
![Page 84: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/84.jpg)
gettingThingsProgrammed.evenea.pl
![Page 85: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/85.jpg)
Architectural Kata• Zobacz program warsztatu
– https://biturl.io/VK4j52
• Zobacz fragment warsztatu– https://biturl.io/VK4Vn8
• Zobacz efekt warsztatu– https://biturl.io/VK4ai0
![Page 86: Od codziennej higieny do strategicznej refaktoryzacji](https://reader034.vdocuments.net/reader034/viewer/2022042723/58e4bd451a28ab1c1f8b6acf/html5/thumbnails/86.jpg)
enxoo bootcamp
Sprawdź najbliższe szkolenia otwarte# Nowoczesne architektury aplikacji
# Getting Things Programmed# Architektura aplikacji biznesowych# Zbieranie wymagań i współpraca z klientem# Techniki pracy z kodem# Technical Leadership™
więcej na bnsit.pl/szkolenia-otwarte