-
SBOM (Software Bill of Materials), czyli "spis treści" oprogramowania, to dokument, który zawiera szczegółowy wykaz wszystkich ko...
-
W świecie dynamicznie rozwijających się modeli językowych (LLM) rośnie potrzeba lepszej, bardziej kontrolowanej i kontekstowej komunikacji ...
-
W architekturze mikroserwisów komunikacja między usługami to chleb powszedni. Serwis A woła B, B woła C, a C czasem pyta jeszcze o coś D......
czwartek, 28 marca 2024
Nie tylko technologie
wtorek, 6 czerwca 2023
What is code refactoring?
Refaktoryzacja kodu to proces wprowadzania zmian w projekcie/programie, w wyniku których nie zmienia się funkcjonalność, lecz utrzymuje się odpowiednią, wysoką jakość organizacji systemu. Celem refaktoryzacji jest poprawa kodu i jego struktury, a nie wytwarzanie nowej funkcjonalności.
Oczekiwane korzyści z refaktoryzacji
Refaktoryzacja ma na celu rozwiązanie konkretnych problemów i przyniesienie korzyści, takich jak:
- Łatwiejsza rozbudowa systemu
- Lepsza współpraca programistów
- Mniej czasu na dyskusje, więcej czasu na dobre rozwiązania
- Łatwiejsze wdrażanie zmian
- Mniej błędów
- Mniejsze wydatki na wsparcie i rozwój w przyszłości
Lista korzyści jest długa i nieograniczona. Przed przystąpieniem do refaktoryzacji ważne jest określenie celu, jaki chcemy osiągnąć.
Daily Refactoring - codzienne ulepszanie kodu
Podstawowym krokiem do utrzymania dobrze zorganizowanego kodu jest codzienne refaktoryzowanie. Zgodnie z koncepcją Test-Driven Development (TDD), cykl wytwarzania kodu składa się z trzech kroków: red (tworzenie testów jednostkowych, które nie przechodzą), green (implementacja kodu produkcyjnego, który pozwala na przejście testów) oraz refactor (poprawa kodu w celu jego ulepszenia).
Codzienne refaktoryzowanie charakteryzuje się tym, że:
- Funkcjonalność jest pokryta przez testy
- Większość zadań refaktoryzacyjnych może być wykonana automatycznie przez środowisko programistyczne (IDE)
- Nie wymaga dużego nakładu czasu
Przykłady metod stosowanych w codziennym refaktoryzowaniu to m.in. zmiana nazwy (Rename), zmiana sygnatury (Change Signature), wyodrębnianie metod (Extract Method), wstawianie kodu inline (Inline method), wprowadzanie stałych (Introduce Constant), wprowadzanie pól (Introduce Field), wprowadzanie parametrów (Introduce Parameter), wprowadzanie zmiennych (Introduce Variable) oraz bezpieczne usuwanie (Safe Delete).
Strategic Refactoring - zmiany na większą skalę
Kolejnym krokiem jest refaktoryzacja strategiczna, która dotyczy większych zmian w systemie, takich jak modyfikacja większej liczby klas, modyfikacja całego modułu lub nawet wydzielenie osobnego mikroserwisu.
W refaktoryzacji strategicznej rozważane są zmiany, które mają na celu dostosowanie kodu do nowych wymagań biznesowych lub technologicznych. Przykłady takich zmian to migracja do nowoczesnych frameworków lub języków, zmiana architektury systemu, wprowadzenie wzorców projektowych, rozdzielenie odpowiedzialności między klasy lub moduły oraz usunięcie zbędnego lub przestarzałego kodu.
Refaktoryzacja strategiczna wymaga więcej czasu i planowania, ale przynosi większe korzyści w dłuższej perspektywie. Jest częścią zarządzania projektem informatycznym.
Podsumowanie
Refaktoryzacja kodu jest ważnym elementem tworzenia oprogramowania, który pozwala utrzymać aplikacje w dobrej kondycji i umożliwia ich rozwój. Codzienne refaktoryzowanie oraz refaktoryzacja strategiczna są dwa rodzaje refaktoryzacji, które mają swoje miejsce w procesie tworzenia oprogramowania. Ważne jest, aby regularnie i systematycznie wykonywać codzienne refaktoryzowanie, a także planować i przeprowadzać refaktoryzację strategiczną w celu dostosowania kodu do nowych wymagań.
Pamiętajmy, że refaktoryzacja ma na celu poprawę jakości kodu i organizacji systemu, co przekłada się na efektywność i łatwiejsze rozwijanie aplikacji. Przed przystąpieniem do refaktoryzacji warto określić oczekiwane korzyści i realistyczny zakres czasowy dla ich osiągnięcia.
środa, 3 maja 2023
Wzorce MSA - API Gateway
Cześć!
Dziś chciałbym rozpocząć nową serię artykułów - tym razem bardziej techniczną. Architekturą mikroserwisów zajmuję się już jakiś czas - stąd pomysł na cynk poświęcony temu zagadnieniu. Bazując na moich wzlotach i upadkach z pracą w tej architekturze, przedstawie wam mój punk widzenia na niektóre wzrorce związane z mikroserwisami. Jednym z ważniejszych jest APi Gateway
API Gateway to wzorzec projektowy, który służy jako punkt wejścia do całej infrastruktury mikroserwisowej. Jego głównym zadaniem jest odbieranie i dystrybucja żądań HTTP między klientem a poszczególnymi mikroserwisami. Dzięki temu API Gateway staje się warstwą pośredniczącą, która ukrywa przed klientem całą złożoność mikroserwisowej architektury oraz zapewnia jednolity interfejs API dla całej aplikacji.
Jedną z głównych funkcji API Gateway jest ukrywanie szczegółów implementacyjnych serwerów mikroserwisów przed klientami. Dzięki temu, klient nie musi wiedzieć, gdzie znajduje się konkretna usługa, a także nie musi znać specyfiki komunikacji z nią. API Gateway działa jak pośrednik, który przetwarza żądania klientów na odpowiednie żądania dla serwerów mikroserwisów, a także transformuje odpowiedzi serwerów na odpowiednie formaty dla klientów.
Wśród innych korzyści płynących z wykorzystania API Gateway można wymienić:
- Obsługa autoryzacji i autentykacji użytkowników. Dzięki temu, można łatwo kontrolować dostęp do poszczególnych serwisów i zabezpieczyć je przed nieautoryzowanym dostępem.
- Ochrona przed atakami typu DDoS - API Gateway może służyć jako pierwsza linia obrony przed atakami typu DDoS, ponieważ umożliwia kontrolę i filtrowanie ruchu sieciowego.
- Jednolity interfejs API - dzięki API Gateway, klient nie musi znać szczegółów implementacji poszczególnych mikroserwisów. Zamiast tego, może korzystać z jednego, wspólnego interfejsu API.
- Skalowalność - API Gateway może być łatwo skalowany, dzięki czemu można obsługiwać duże obciążenia sieciowe.
Wdrożenie API Gateway wymaga odpowiedniego projektowania i implementacji. W tym celu można wykorzystać odpowiednie narzędzia, takie jak Kong, Tyk czy Apigee, które ułatwiają zarządzanie i konfigurację bramy API, albo też spróbować się z rozwiązaniami softwarowymi takimi jak Netflix Zuul czy Spring Cloud Gateway.
Podsumowując, API Gateway to niezbędny element mikroserwisowej architektury, który zapewnia jednolity interfejs API oraz ułatwia integrację i zarządzanie poszczególnymi mikroserwisami. Dzięki niemu można zwiększyć skalowalność oraz ochronić aplikację przed atakami sieciowymi.
W kolejnych artykułach omówimy inne ważne wzorce projektowe w architekturze mikroserwisów, takie jak Circuit Breaker, Service Registry, czy też Event Sourcing.



