Ty      4096  
  128      Słaby Kod 

Legacy Fighter: AGENDA

Sprawdź, czego się z nami nauczysz się z nami nauczysz!
(materiał jest publikowany przez 14 tygodni)

Moduł 1 - Wprowadzenie [01:26:24]

  1. 1.1. Struktura szkolenia
  2. 1.2. Materiały do szkolenia
  3. 1.3. Dług techniczny
  4. 1.4. Obserwowalne zachowania i ich bezpieczeństwo
  5. 1.5. Zwrot z inwestycji
  6. 1.6. Generalna ścieżka refaktoryzacji
  7. 1.7. EventStorming w projekcie legacy, wprowadzenie
  8. 1.8. EventStorming w projekcie legacy, mechanika As-Is
  9. 1.9. Sesja Big Picture EventStorming
  10. 1.10. Czego warto unikać na tym etapie, aby sesja była wartościowa
Moduł 2 - Refaktoryzacja do wzorca Value Object - część 1 [01:28:05]


2.1 Problem powtarzającej się walidacji - Driver License [00:37:45]

  1. 2.1 Jak przeprowadzić EventStorming w systemie Legacy?
  2. 2.1.1. Jaki problem rozwiązujemy?
  3. 2.1.2. Jak nasz problem rozwiązać?
  4. 2.1.3. Zapewnienie bezpieczeństwa zmiany
  5. 2.1.4. Dodatkowa funkcja testów
  6. 2.1.5. Wprowadzenie nowego konceptu
  7. 2.1.6. Podłączenie nowego kodu
  8. 2.1.7. Obserwacja efektów
  9. 2.1.8. Czy nie mamy duplikacji w testach?
  10. 2.1.9. Jak to zrobić w moim projekcie?


2.2 Problem powtarzającej się walidacji - Driver License [00:37:45]

  1. 2.2.1 Jaki problem rozwiązujemy?
  2. 2.2.2. Jak nasz problem rozwiązać?
  3. 2.2.3. Usuwalność kodu
  4. 2.2.4. Zapewnienie bezpieczeństwa zmiany
  5. 2.2.5. Wprowadzenie nowego konceptu
  6. 2.2.6. Podłączenie nowego kodu
  7. 2.2.7. Techniki: Extract Method / Move Method
  8. 2.2.8. Obserwacja efektu
  9. 2.2.9. Jak to zrobić w moim projekcie?
  10. 2.2.10. Dodatkowe komentarze
Moduł 2 - Refaktoryzacja do wzorca Value Object - część 2 [01:17:21]


2.3 Problem zmiennej prezentacji - Distance [00:25:09]

  1. 2.3.1. Jaki problem rozwiązujemy?
  2. 2.3.2. Jak nasz problem rozwiązać?
  3. 2.3.3. Zapewnienie bezpieczeństwa zmiany
  4. 2.3.4. Wprowadzenie nowego konceptu
  5. 2.3.5. Podłączenie nowego kodu
  6. 2.3.6. Obserwacja efektu
  7. 2.3.7. Jak to zrobić w moim projekcie?
  8. 2.3.8. Dodatkowe komentarze


2.4 Problem ukrytego konceptu domenowego - Tariff [00:32:29]

  1. 2.4.1. Jaki problem rozwiązujemy?
  2. 2.4.2. Jak nasz problem rozwiązać?
  3. 2.4.3. Zapewnienie bezpieczeństwa zmiany
  4. 2.4.4. Wprowadzenie nowego konceptu
  5. 2.4.5. Podłączenie nowego kodu
  6. 2.4.6. Obserwacja efektu
  7. 2.4.7. Jak to zrobić w moim projekcie?
  8. 2.4.8. Dodatkowe komentarze


2.5 Podsumowanie [00:09:41]

  1. 2.5.1. Wzorzec Value Object
  2. 2.5.2. Zadanie domowe


2.6 Toolbox Legacy Fightera [00:10:02]

  1. 2.6.1. Wprowadzanie logiki ortogonalnej w projekcie
  2. 2.6.2. Implementacja aspektu
Moduł 3 - Refaktoryzacja do wzorca Aggregate - część 1 [02:29:27]


3.1 Problem braku spójności danych - Transit [01:00:07]

  1. 3.1.1 Jaki problem rozwiązujemy?
  2. 3.1.2 Jak nasz problem rozwiązać?
  3. 3.1.3 Zapewnienie bezpieczeństwa zmiany
  4. 3.1.4 Wprowadzenie enkapsulacji
  5. 3.1.5 Obniżenie wysokości testu
  6. 3.1.6 Refaktoryzacja, a naprawa całego systemu
  7. 3.1.7 Obserwacja efektów
  8. 3.1.8 Jak to zrobię u siebie?
  9. 3.1.9 Dodatkowe komentarze


3.2 Problem zbyt dużego obiektu lub zbyt dużej transakcji bazodanowej - CarType [01:03:26]

  1. 3.2.1 Jaki problem rozwiązujemy?
  2. 3.2.2 Problemy ze współbieżnym dostępem do danych
  3. 3.2.3 Jak nasz problem rozwiązać?
  4. 3.2.4 Strategia podziału obiektu
  5. 3.2.5 Zapewnienie bezpieczeństwa zmiany
  6. 3.2.6 Implementacja podziału obiektu
  7. 3.2.7 Obserwacja efektów
  8. 3.2.8 Ale teraz odczyt powoduje dwa zapytania do bazy!
  9. 3.2.9 Strategia migracji danych
  10. 3.2.10 A co, gdy przy refaktoryzacji znajdę błąd?


3.3 Mikrocykle w refaktoryzacji [00:13:48]

  1. 3.3.1: Refaktoryzacja jako szereg mniejszych kroków
  2. 3.3.2 A gdyby nie chodziło o dostępność funkcji systemu?
  3. 3.3.3 Sztuczka za pomocą wzorca Proxy


3.4 Toolbox Legacy Fightera

  1. 3.4.1 Przeglądanie stosu wywołań
  2. Zadania Praktyczne
  3. Zadanie: Refaktoryzacja braku spójności
  4. Komentarz do zadania domowego
  5. Zadanie: Podział obiektu
  6. Komentarz do zadania domowego
Moduł 3 - Refaktoryzacja do wzorca Aggregate - część 2 [03:08:05]


3.5 Problem pomieszanej logiki domenowej i procesowej - Claim [00:54:02]

  1. 3.5.1 Jaki problem rozwiązujemy?
  2. 3.5.2 Rodzaje logiki
  3. 3.5.3. Jak nasz problem rozwiązać?
  4. 3.5.4. Implementacja wydzielenia obiektu
  5. 3.5.5 Lokalizacja danych a spójność zmiany
  6. 3.5.6 Separacja logiki biznesowej i procesowej
  7. 3.5.7 Obserwacja efektów
  8. 3.5.8 Jak to zrobić w moim projekcie?


3.6 Claim - przypadek prostszy [00:02:50]

  1. 3.6.1 A gdyby nie chodziło o logikę procesową?


3.7 Problem dużej zmienności reguł biznesowych- część I - AwardsAccount [00:58:27]

  1. 3.7.1 Jaki problem rozwiązujemy?
  2. 3.7.2. Jak nasz problem rozwiązać?
  3. 3.7.3 Zapewnienie bezpieczeństwa zmiany
  4. 3.7.4. Uproszczenie przez pozorne skomplikowanie
  5. 3.7.5. Wprowadzenie VO Miles
  6. 3.7.6 Podłączenie VO Miles
  7. 3.7.7. Obserwacja efektów
  8. 3.7.8 Wprowadzenie enkapsulacji
  9. 3.7.9. Pierwsza rozmowa o modułach
  10. 3.7.10. Dodatkowe komentarze


3.8 Problem dużej zmienności reguł biznesowych - część II - AwardsAccount i polityki [00:21:48]

  1. 3.8.1. Jaki problem rozwiązujemy?
  2. 3.8.2. Jak nasz problem rozwiązać?
  3. 3.8.3 Wprowadzenie polityk
  4. 3.8.4. Obserwacja efektów
  5. 3.8.5. Jak to zrobić w moim projekcie?


3.9 Podsumowanie [00:16:43]

  1. 3.9.1 Wzorzec Aggregate
  2. 3.9.2 4 zasady projektowania agregatow [07:27]


3.10 EventStorming [00:30:34]

  1. 3.10.1. EventStorming jako narzędzie modelowania agregatów
  2. 3.10.2. DEMO ES [11:36]
  3. 3.10.3. Czego warto unikać na tym etapie, aby sesja była wartościowa


3.11 Toolbox Legacy Fightera

  1. 3.11.1 Poruszanie się w szumie Legacy [03:41]
  2. Zadanie praktyczne
  3. Zadanie: Oddzielenie decyzji od konsekwencji
  4. Komentarz do zadania domowego
Moduł 4 - Refaktoryzacja do wzorca CQRS - część 1 [01:26:30]


4.1 Problem budowania złożonych odczytów za pomocą encji [00:48:27]

  1. 4.1.1 Jaki problem rozwiązujemy?
  2. 4.1.2 Jak nasz problem rozwiązać?
  3. 4.1.3 Natura obiektów DTO (w prawie) każdym projekcie
  4. 4.1.4 Zmiana sposobu generowania raportu
  5. 4.1.5 Greenfield w Brownfieldzie
  6. 4.1.6 Obserwacja efektów
  7. 4.1.7 Jak to zrobić w moim projekcie?
  8. 4.1.8 Dodatkowe komentarze


4.2 Bezpiecznie wprowadzanie zmiany - Parallel Models [00:25:50]

  1. 4.2.1 Parallel Models, czyli równoległe modele
  2. 4.2.2 Kłopoty z podłączaniem nowego modelu
  3. 4.2.3 Wprowadzenie abstrakcji nad oboma modelami wraz z FeatureFlags
  4. 4.2.4 Rekoncyliacja


4.3 Toolbox Legacy Fightera

  1. 4.3.1 Sterowanie czasem w Legacy
  2. Zadania praktyczne
  3. Zadania praktyczne
  4. Komentarz do zadania domowego
Moduł 4 - Refaktoryzacja do wzorca CQRS - część 2 [01:49:55]


4.4 Problem niedopasowanego pod odczyt modelu danych [00:55:24]

  1. 4.4.1 Jaki problem rozwiązujemy?
  2. 4.4.2 Rozdzielanie odczytów od zapisów, a spójność danych
  3. 4.4.3 Jak nasz problem rozwiązać?
  4. 4.4.4 Ukryte powiązania w kodzie
  5. 4.4.5 Rozdzielenie modelu zapisu od odczytu
  6. 4.4.6 Obserwacja efektów
  7. 4.4.7 Jak to zrobić w moim projekcie?
  8. 4.4.8 Dodatkowe komentarze


4.5 Problem niedopasowanego paradygmatu bazy danych [00:41:49]

  1. 4.5.1 Jaki problem rozwiązujemy?
  2. 4.5.2 Jak nasz problem rozwiązać?
  3. 4.5.3 Ukryte koszty zmiany modelu
  4. 4.5.4 Zmiana paradygmatu modelu odczytowego
  5. 4.5.5 Obserwacja efektów
  6. 4.5.6 Jak to zrobić w moim projekcie?
  7. 4.5.7 Dodatkowe komentarze


4.6 Podsumowanie [00:12:42]

  1. 4.6.1 Wzorzec CQRS
  2. 4.6.2 CQRS versus Command / Query Handler Pattern
  3. 4.6.3 Zadanie domowe
Moduł 5 - Marketing i Komunikacja [01:27:02]

  1. 5.1 Wstęp
  2. 5.2 Dramat współczesny, scena pierwsza
  3. 5.3 Sortowanie informacji, podobieństwa i różnice
  4. 5.4 Opis rzeczywistości, szczegół i ogół
  5. 5.5 Źródło referencji i autorytetu, źródło wewnętrzne i zewnętrzne
  6. 5.6 Zadanie 1
  7. 5.7 Dramat współczesny, scena druga
  8. 5.8 Nastawienie do świata, od problemu, do celu
  9. 5.9 Motywowanie się lub kogoś, reaktywne vs proaktywne
  10. 5.10 Przekonywanie się lub kogoś, mogę, muszę
  11. 5.11 Zadanie 2
  12. 5.12 Dramat współczesny, scena trzecia
  13. 5.13 Pierwszeństwo, ja, inni
  14. 5.14 Zadanie 3
  15. 5.15 Łączenie metaprogramów
  16. 5.16 Jak ćwiczyć oraz wdrażać obserwację i świadomą komunikację?
  17. 5.17 Podsumowanie metaprogramów
  18. 5.18 Model rozwoju kompetencji braci Dreyfus
  19. 5.19 Zadanie 4
  20. 5.20 Zadanie 4: rozwiązanie
  21. 5.21 Cykl Kolba w trenowaniu umiejętności
  22. 5.22 Zadanie 5
  23. 5.23 Zadanie 5: rozwiązanie
Moduł 6 - Narzędzia [00:56:08]

  1. 6.1.1 CodeScene - analiza change coupling
  2. 6.1.2 CodeScene - analiza lokalnej struktury klas
  3. 6.1.3 CodeMR - namierzanie i analiza problematycznych klas
  4. 6.1.4 PHPMetrics - analiza sprzężenia
  5. 6.1.5 Infection - testowanie mutacyjne
Moduł 7 - Archetypy [01:51:46]


7.1

  1. 7.1.1 Wstęp
  2. 7.1.2 Dydaktyka i specyficzny typ kodu Legacy
  3. 7.1.3 Uogólnienie vs wyabstrahowanie vs zmiana reprezentacji


7.2 Problem 1: Logika zależna od ról w systemie [00:39:06]

  1. 7.2.1 Logika zależna od ról w systemie
  2. 7.2.2 Nowe wymagania i pozorne rozwiązanie
  3. 7.2.3 Strategia refaktoringu
  4. 7.2.4 Wzorzec analityczny: Party, Party Role, Party Relationship
  5. 7.2.5 Miejsce wzorca Party w architekturze
  6. 7.2.6 Wzorzec projektowy Role Object
  7. 7.2.7 Składamy wszystko razem
  8. 7.2.8 Podsumowanie problemu
  9. 7.2.9 Zadanie (1.1 i 1.2)


7.3 Problem 2 [00:55:57]

  1. 7.3.1 Analiza kodu zastanego
  2. 7.3.2 Nowe wymagania i problemy
  3. 7.3.3 O co tak naprawdę chodzi?
  4. 7.3.4 Transformacja logiki - poziom 1
  5. 7.3.5 Dlaczego to rozwiązanie jest niedostateczne i czego się z niego nauczyliśmy
  6. 7.3.6 Transformacja logiki - poziom 2
  7. 7.3.7 Zadanie (1 i 2)


7.4 Podsumowanie [00:08:42]

  1. 7.4.1 Dalsza rozbudowa
  2. 7.4.2 Zakończenie
Moduł 8 - Lokalna struktura kodu [01:37:48]


8.1 Zasady i pryncypia [00:40:07]

  1. 8.1.1 Zasada skauta
  2. 8.1.2 Teoria rozbitych okien
  3. 8.1.3 Brzydkie zapachy kodu
  4. 8.1.4 SOLID vs STUPID


8.2 Przykładowe refaktoryzacje lokalnej struktury kodu [00:38:12]

  1. 8.2.1 Problem dynamicznych zachowań obiektów
  2. 8.2.2 Problem zagnieżdżonej logiki warunkowej
  3. 8.2.3 Problem zmiennej logiki warunków
  4. 8.2.4 "Automatyczna refaktoryzacja w większej skali"
  5. 8.2.5 Problem zmiennej logiki przejść stanowych
  6. 8.2.6 Problem niskiej wydajności algorytmu


8.3 Toolbox Legacy Fightera

  1. 8.3.1 Zabezpieczanie kodu przed degradacją


8.4 Antywzorce [11:01]

  1. 8.4.1 Problem redukcji parametrów
  2. 8.4.2 Problem redukcji wstrzykiwanych zależności
Moduł 9 - Refaktoryzacja do wzorca Bounded Context - część 1 [01:40:04]


9.1 Czym jest modularyzacja i dlaczego jej (nie) potrzebuję? [00:16:48]

  1. 9.1.1 Jaki problem rozwiązujemy?
  2. 9.1.2 "Ale my mamy moduły"
  3. 9.1.3 Problem szukania odpowiednich granic między modułami


9.2 Przygotowania do modularyzacji [00:24:39]

  1. 9.2.1 Co muszę wiedzieć?
  2. 9.2.2 Problem z testami automatycznymi
  3. 9.2.3 Rozluźnianie zależności


9.3 Rozplątywanie Transit/TransitService [00:34:10]

  1. 9.3.1 Separacja danych do odczytu
  2. 9.3.2 Główne pytania na jakie odpowiada klasa Transit
  3. 9.3.3 Pojedyncze źródło prawdy
  4. 9.3.4 Analiza kohezji i analiza lingwistyczna


9.4 Typowe rozterki [00:21:02]

  1. 9.4.1 Czy to nowy moduł czy tylko nowa grupa obiektów?
  2. 9.4.2 Obserwacja efektu - czy to dobry podział?
  3. 9.4.3 Co ze statusami i czy muszę duplikować dane?
  4. 9.4.4 Czy sprzątać w środku modułu?


9.5 Praca Domowa [03:25]

  1. 9.5.1 Zadanie domowe
Moduł 9 - Refaktoryzacja do wzorca Bounded Context - część 2 [01:13:28]


9.6 EventStorming [00:16:04]

  1. 9.6.1 EventStorming jako narzędzie znajdowania granic kontekstów, część 1
  2. 9.6.2 Perspektywy Being, Behaving, Becoming
  3. 9.6.3 EventStorming jako narzędzie znajdowania granic kontekstów, część 2


9.7 Warstwy odpowiedzialności [00:17:26]

  1. 9.7.1 Warstwy odpowiedzialności
  2. 9.7.2 Dalszy rozwój systemu w kierunku warstw odpowiedzialności
  3. 9.7.3 Różne tempo rozwoju warstw
  4. 9.7.4 Zadanie domowe


9.8 Parallel Models [05:54]

  1. 9.8.1 Zmiany w równoległych modelach


9.9 Rozplątywanie kontekstów - inny przypadek i inne podejście [00:26:30]

  1. 9.9.1 Jaki problem rozwiązujemy?
  2. 9.9.2 Jak rozplątać węzeł?
  3. 9.9.3 Inny sposób testowania
  4. 9.9.4 Implementacja i wpięcie nowego modelu


9.10 Podsumowanie [00:07:34]

  1. 9.10.1 Wzorzec Bounded Context
  2. 9.10.2 Jak to zrobić w moim projekcie?
Moduł 10 - Systemy rozproszone [00:47:57]


10.1 Rozpraszanie systemu [00:15:49]

  1. 10.1.1 Kiedy i dlaczego rozpraszać system?
  2. 10.1.2 Sposoby komunikacji
  3. 10.1.3. Rozproszone brzydkie zapachy


10.2 Strangler Pattern [00:15:05]

  1. 10.2.1 Zastosowanie
  2. 10.2.2 Branch by Abstraction
  3. 10.2.3 Co z testami?


10.3 Problem kaskadowych zmian [04:46]

  1. 10.3.1 Odwracanie kierunku zależności


10.4 Problem wielu zmian w osobnych bazach [03:48]

  1. 10.4.1. Rozproszone wykonanie procesu biznesowego


10.5 Toolbox [07:10]

  1. 10.5.1 Change Data Capture - Debezium
AFTER HOURS, rozmowy z gośćmi na tematy poruszane w poszczególnych modułach

Jesteśmy
w kontakcie!

Mariusz Gil M. Gil
Jakub Pilimon J. Pilimon
Sławomir Sobótka S. Sobótka
Maciej Aniserowicz M. Aniserowicz

© DEVSTYLE spółka z ograniczona odpowiedzialnością, UL. Marii Konopnickiej 14 /8, 15-215 Białystok; Tel. +48 452 246 901; NIP: 5423453088 (dawniej Maciej Aniserowicz prowadzący jednoosobową działalność gospodarczą, NIP 5422824401), Sąd Rejonowy w Białymstoku, XII Wydział Gospodarczy - Krajowego Rejestru Sądowego KRS 0000983500; REGON: 522649044
Informacje o tym, jak przetwarzamy Twoje dane, znajdziesz na: devstyle.pl/RODO.