author-avatar
Dominik Martyniak
Open Source 10 minut

Wprowadzenie do Projektu Open-Source: Technologiczne Podstawy i Przyszłe Kierunki projektu

Zgodnie z wcześniejszymi zapowiedziami, nadszedł czas, aby rozpocząć serie wpisów o mojej ekscytującej przygodzie z pierwszym własnym projektem open-source. Jestem pełen entuzjazmu, że będę dzielić się tą podróżą z Wami za pośrednictwem bloga. Właśnie teraz chciałbym zacząć relacjonować krok po kroku mój postęp, omawiać podejścia, które wybrałem, oraz wyjaśniać, dlaczego to właśnie one znalazły się na mojej drodze.

 

Baza projektu Open-source: Architektura, Backend, Front, CI/CD

 

Nie sposób podjąć tego zadania bez wcześniejszego przedstawienia technologicznych fundamentów, na których opierać się będzie projekt open-source. Wybór odpowiednich narzędzi i technologii stanowi kluczowy element efektywnej realizacji celu, dlatego też pragnę się z Wami podzielić moimi decyzjami w tej kwestii.

 

Architektura

 

Bez wątpienia, podejście heksagonalne jest naturalnym kierunkiem do rozważenia w kontekście naszego backendu. Wartości, które to podejście niesie ze sobą, mogą naprawdę przynieść ogromne korzyści naszemu projektowi open-source. Zalety i wady tej architektury możecie poznać w tym wpisie. W dodatku, biorąc pod uwagę aktualne trendy w dziedzinie programowania, sądzę, że podejście heksagonalne ma szansę znakomicie się tutaj odnaleźć.

 

Backend język, framework i persystencja.

 

Na samym początku, postawiłem sobie za priorytet stworzenie solidnej, skalowalnej architektury. W związku z tym, jako główny język programowania dla backendu, postanowiłem na Jave w wersji 17 LTS.

Wybór wersji LTS (Long-Term Support) ma wiele korzyści, zwłaszcza w kontekście projektów o dłuższym horyzoncie czasowym, wymagających stabilności, bezpieczeństwa i minimalizacji ryzyka. Oto kilka powodów, dla których warto rozważyć wybór wersji LTS:
Stabilność i niezawodność, Wsparcie długoterminowe, Minimalizacja zmian, Zgodność, Bezpieczeństwo, Wsparcie społeczności

Jako framework, wybór padł na Spring Boot 3.3. będzie stanowić bazę projektu open-source. Kiedy przyjrzymy się wyborowi , nie ma chyba potrzeby głęboko zagłębiać się w jego szczegóły – ten framework jest już tak dojrzałym narzędziem, że stał się wręcz nieodzownym elementem w wielu projektach opartych o język Java. Jego uniwersalność i elastyczność sprawiają, że odgrywa kluczową rolę w rozwijaniu aplikacji w sposób efektywny i wydajny. Z pewnością jest on znany większości z nas i wykorzystywany niemalże w każdym projekcie, co świadczy o jego niezaprzeczalnej wartości i uznaniu w społeczności programistycznej.

 

Baza danych

 

Nieodłącznym elementem jest również baza danych, która odgrywa kluczową rolę w przechowywaniu i zarządzaniu danymi. Po głębokim namyśle, postanowiłem skorzystać z PostgreSQL, który oferuje nie tylko niezawodność, ale także łatwą skalowalność, co jest ważne na przyszłość.

Poniższe cechy idealnie wpasują nam się w ramy naszego projektu open-source. 

Dlaczego wybrałem SQL a nie np. NO-SQL  ? 

  • Relacje: Bazy SQL charakteryzują się relacyjnym modelem, który umożliwia tworzenie i utrzymywanie relacji między danymi.
  • ACID Compliance: Bazy danych SQL zazwyczaj cechuje spełnianie właściwości ACID (Atomicity, Consistency, Isolation, Durability), co oznacza, że są bardziej odpowiednie dla zastosowań, które wymagają silnej spójności danych i gwarancji transakcyjności.
  • Schemat danych: Bazy danych SQL opierają się na stałym schemacie danych, który definiuje strukturę i relacje między tabelami.

 

Angulara i ngrx zintegrowane Rozwiązanie w Tworzeniu Kompletnych Aplikacji webowych

 

W świecie dynamicznego rozwoju oprogramowania, kluczem do sukcesu jest wybór odpowiednich narzędzi i technologii. Dla osób, które mają solidne doświadczenie w obszarze backendu i preferują spójne podejście do budowy aplikacji, połączenie frameworka Angular z biblioteką ngrx stanowi rozwiązanie w pełni satysfakcjonujące.

Angular, z jego szczególnym naciskiem na modularność i reużywalność kodu, doskonale pasuje do tego, co wiem najlepiej. Dzięki podziałowi projektu na moduły, serwisy i komponenty, możemy tworzyć struktury, które są zarówno intuicyjne w zarządzaniu, jak i skalowalne.

Ale co to byłby za wpis, gdybym nie wspomniał o ngrx? Dodając tę bibliotekę do naszego zestawu narzędzi, osięgniemy kolejny poziom zarządzania stanem aplikacji. Ngrx implementuje architekturę wzorca Redux, która znacznie ułatwia przepływ danych i zarządzanie nimi w aplikacji. Dzięki temu, możemy skupić się na tworzeniu logiki biznesowej, a nie martwić się o synchronizację danych i stanu między różnymi komponentami.

Integrując Angulara i ngrx, uzyskujemy kompletną aplikację, w której wszystkie elementy łączą się w spójną całość. Moduły, komponenty, serwisy i zarządzanie stanem - wszystko to tworzy ekosystem, w którym praca staje się płynna i przyjemna. Moja wiedza z obszaru backendu idealnie koresponduje z tymi technologiami, umożliwiając mi tworzenie oprogramowania, które nie tylko działa bez zarzutu, ale także dostarcza satysfakcji z procesu tworzenia.

 

Tailwind CSS - Dlaczego warto?


Tailwind CSS to innowacyjny framework CSS, który zyskał ogromną popularność wśród deweloperów. Jego unikalna filozofia opiera się na tworzeniu interfejsów poprzez konstruowanie komponentów za pomocą klas CSS o precyzyjnie określonych nazwach. Dzięki temu podejściu, unikamy nadmiernego powtarzania się w kodzie i łatwiej utrzymujemy spójność stylistyczną projektu. Tailwind oferuje szeroki zestaw gotowych komponentów i narzędzi, które znacznie przyspieszają proces tworzenia interfejsów, pozwalając skupić się na projektowaniu, a nie na ciągłym definiowaniu klas CSS.

 

CI/CD

 

Świat dewelopmentu i operacji (DevOps) stale ewoluuje, dostarczając nam coraz to nowsze narzędzia i metody, które pomagają usprawniać procesy tworzenia, testowania i wdrażania oprogramowania. Jednym z najważniejszych trendów w tym obszarze jest wykorzystanie kontenerów Docker oraz orkiestratora Kubernetes. W połączeniu z narzędziami takimi jak GitHub Actions, można stworzyć potężną i elastyczną infrastrukturę, która umożliwia automatyzację i zarządzanie cyklem życia aplikacji.


Infrastruktura oparta na kontenerach:


Współczesne podejście do zarządzania infrastrukturą opiera się na kontenerach, które pakują aplikacje w izolowane, przenośne środowiska. Wykorzystanie kontenerów Docker pozwala na eliminację problemów związanych z różnicami między środowiskami produkcyjnymi a deweloperskimi, co przekłada się na bardziej niezawodne i przewidywalne wdrożenia. To także możliwość szybkiego skalowania aplikacji w miarę potrzeb.

 

GitHub Actions: 


GitHub Actions to narzędzie umożliwiające automatyzację różnych aspektów pracy z repozytoriami na GitHubie. Możemy wykorzystać je do definiowania i uruchamiania niestandardowych akcji w odpowiedzi na różne zdarzenia, takie jak wprowadzenie zmian do repozytorium czy utworzenie nowego "pull request". W połączeniu z kontenerami Docker i Kubernetes, możemy w prosty sposób skonfigurować procesy CI/CD, wdrażając nasze aplikacje w sposób automatyczny i niezawodny.


Orkiestracja z Kubernetes:


Jeśli chodzi o zarządzanie kontenerami na dużą skalę, Kubernetes jest jednym z najpopularniejszych rozwiązań. Działa jako orkiestrator, umożliwiając automatyczne skalowanie, zarządzanie wersjami aplikacji, odzyskiwanie po awariach i wiele innych. Dzięki temu można efektywnie zarządzać nawet skomplikowanymi aplikacjami mikroserwisowymi.

 

Podsumowanie:

 

Rozważając wybór technologii, które stanowią solidne fundamenty dla mojego projektu open-source, jestem przekonany, że podjąłem trafne decyzje. Każda z tych technologii ma do zaoferowania coś wyjątkowego i wnosi cenną wartość do projektu. W kolejnych wpisach będę dokładniej omawiał każdą z tych części, dzieląc się zarówno moimi przemyśleniami, jak i kodem aplikacji. Moim celem jest również przybliżenie dziedziny biznesowej, w której mój projekt opensourcowy znajdzie swoje zastosowanie. Dzięki temu, mam nadzieję, że odkryjemy razem potencjał tych technologii oraz zrozumiemy, w jaki sposób mogą one przyczynić się do stworzenia wartościowej i funkcjonalnej aplikacji opensource. Zapraszam do śledzenia kolejnych wpisów, w których podzielę się rozwiniętymi aspektami projektu oraz własnymi doświadczeniami.

 

5
[projekt, spring boot, angular, open source, java]

Więcej od Dominik Martyniak

Więcej artykułów