Przejdź do głównej zawartości

Wzorce Elixir i Phoenix

Opanuj rozwój Elixir i Phoenix z Cursor i Claude Code. Te wzorce obejmują programowanie funkcyjne, zasady OTP, LiveView, systemy współbieżne i unikalne funkcje, które czynią Elixir idealnym do budowania odpornych na błędy aplikacji czasu rzeczywistego.

  1. Otwórz Cursor w swoim workspace
  2. Uruchom tryb Agent (Cmd/Ctrl + I)
  3. Prompt: “Utwórz projekt Elixir Phoenix z:
    • Phoenix 1.7+ z LiveView
    • Ecto dla bazy danych
    • Tailwind CSS
    • Systemem uwierzytelniania
    • Konfiguracją Docker
    • Konfiguracją testów z ExUnit”
  4. Agent obsługuje komendy mix i konfigurację
# Prompt architektury Phoenix:
"Skonfiguruj aplikację Phoenix z:
- Kontekstami dla logiki domenowej
- LiveView dla UI w czasie rzeczywistym
- PubSub dla wiadomości
- Schematami i migracjami Ecto
- Zadaniami w tle z Oban
- Telemetry dla monitorowania"
# Wygenerowana struktura:
lib/
my_app/
accounts/ # Kontekst
catalog/ # Kontekst
mailer/
repo.ex
my_app_web/
live/
controllers/
components/
router.ex
# Prompt komponentu LiveView:
"Utwórz LiveView dla dashboardu w czasie rzeczywistym z:
- Wieloma komponentami wykresów
- Aktualizacjami na żywo przez PubSub
- Interakcjami użytkownika
- Optymistycznymi aktualizacjami UI
- Odzyskiwaniem po błędach"
# Prompt funkcji czasu rzeczywistego:
"Zaimplementuj czat w czasie rzeczywistym z:
- Phoenix Channels
- Śledzeniem obecności
- Historią wiadomości
- Wskaźnikami pisania
- Potwierdzeniami odczytu
- Powiadomieniami push"

Najlepsze praktyki LiveView

AI może pomóc z:

  • Optymalizacją aktualizacji assigns
  • Redukcją danych przez przewód
  • Hokami po stronie klienta
  • Interop JavaScript
  • Względami SEO
# Prompt GenServer:
"Utwórz GenServer dla:
- Serwisu ograniczania częstotliwości
- Trwałości stanu
- Odzyskiwania po awarii
- Dynamicznej supervisi
- Zdarzeń telemetry
- Obsługi backpressure"
  1. Projektowanie supervisi: “Utwórz drzewo supervisi dla przetwarzania płatności”
  2. Implementacja workerów: “Dodaj workery GenServer ze strategiami restartu”
  3. Dodanie Dynamic Supervisors: “Zaimplementuj dynamiczne pule workerów”
  4. Monitorowanie zdrowia: “Dodaj telemetry i sprawdzanie zdrowia”
# Prompt schematu Ecto:
"Zaprojektuj schematy Ecto dla e-commerce:
- Architektura multi-tenant
- Asocjacje polimorficzne
- Soft deletes
- Logowanie audytu
- Wyszukiwanie pełnotekstowe
- Widoki bazy danych"

Złożone zapytania

# Prompt: "Utwórz zapytanie Ecto z:
# - Funkcjami okienka
# - CTE
# - Lateral joins
# - Agregacjami"

Wydajność

# Prompt: "Zoptymalizuj zapytania z:
# - Strategiami preloading
# - Batch loading
# - Fragmentami zapytań
# - Raw SQL gdy potrzeba"
# Prompt wzorców współbieżności:
"Zaimplementuj system współbieżny dla:
- Równoległego przetwarzania danych
- Supervisi zadań
- Programowania opartego na Flow
- Pipeline'ów GenStage
- Integracji Broadway
- Obsługi back-pressure"
# Wzorzec aktora:
"Zaprojektuj system aktora z:
- Protokołami wiadomości
- Maszynami stanu
- Event sourcing
# - Rejestrem procesów
- Aktorami rozproszonymi"
# Prompt zestawu testów:
"Utwórz zestaw testów z:
- Testami jednostkowymi z ExUnit
- Testowaniem LiveView
- Testowaniem kanałów
- Testami integracyjnymi
- Testami opartymi na właściwościach z StreamData
- Mox do mockowania"
  1. Konfiguracja factory: “Utwórz fabryki testowe z ExMachina”
  2. Testy asynchroniczne: “Skonfiguruj asynchroniczne wykonywanie testów”
  3. Sandboxing bazy danych: “Skonfiguruj tryb sandbox Ecto”
  4. Pokrycie: “Dodaj raportowanie pokrycia testów”
# Prompt systemu auth:
"Zaimplementuj uwierzytelnianie z:
- Pow lub Guardian
- Uwierzytelnianiem wieloczynnikowym
- Dostawcami OAuth
- Zarządzaniem sesjami
- Politykami haseł
- Blokowaniem konta"

Lista kontrolna bezpieczeństwa

AI może zaimplementować:

  • Ochronę CSRF
  • Content Security Policy
  • Ograniczanie częstotliwości
  • Sanityzację wejścia
  • Zapobieganie SQL injection
  • Ochronę XSS
# Prompt API GraphQL:
"Utwórz API GraphQL z Absinthe:
- Projektowanie schematu
- Resolvery z dataloader
- Subskrypcje
- Middleware uwierzytelniania
- Obsługa błędów
- Łączenie schematów"
# Projektowanie REST API:
"Utwórz JSON API z:
- Kontrolerami zasobów
- Paginacją
- Filtrowaniem
- Wersjonowaniem API
- Dokumentacją OpenAPI"
# Optymalizacja wydajności:
"Zoptymalizuj aplikację Phoenix dla:
- Redukcji czasu odpowiedzi
- Użycia pamięci
- Optymalizacji zapytań bazy danych
- Strategii cache'owania
- Integracji CDN
- Testów obciążenia"

Cache ETS

# Prompt: "Zaimplementuj cache ETS:
# - Wsparcie TTL
# - Rozgrzewanie cache
# - Invalidacja
# - Limity pamięci"

Integracja Redis

# Prompt: "Dodaj cache'owanie Redis:
# - Pooling połączeń
# - Wsparcie pub/sub
# - Cache rozproszony
# - Wzorzec cache aside"
# Prompt wdrażania:
"Skonfiguruj wdrażanie z:
- Release'ami Elixir
- Dostawcami konfiguracji
- Konfiguracją runtime
- Sprawdzaniem zdrowia
- Rolling updates
- Manifestami Kubernetes"
  1. Budowanie release: “Skonfiguruj mix release z Docker”
  2. Migracje bazy danych: “Skonfiguruj migracje release”
  3. Monitorowanie: “Dodaj AppSignal lub Telemetry”
  4. Skalowanie: “Skonfiguruj clustering i service discovery”
# Prompt rozproszonego Elixir:
"Zaimplementuj system rozproszony z:
- libcluster do discovery
- Globalnym rejestrem procesów
- Rozproszonym PubSub
- CRDT dla stanu
- Obsługą split-brain
- Partycjami sieciowymi"
# Implementacja event sourcing:
"Utwórz system event-sourced z:
- Frameworkiem Commanded
- Event store
- Projekcjami
- Process managers
- Orkiestracją Saga
- Strategiami snapshotów"
# Strukturyzuj prompty jak:
"Utwórz [moduł/funkcję] w Elixir który:
- Przestrzega zasad OTP
- Obsługuje te przypadki błędów: [lista]
- Zawiera @spec i @doc
- Ma testy oparte na właściwościach
- Skutecznie używa pattern matching"
# Rozwój makr:
"Utwórz makro dla:
- Implementacji DSL
- Walidacji compile-time
- Generowania kodu
- Manipulacji AST
- Względów higieny"
# Integracja NIF/Port:
"Zaimplementuj integrację natywną:
- Rustler dla NIF
- Obsługa błędów
- Zarządzanie zasobami
- Asynchroniczne NIF
- Sterowniki portów"

Unikaj tych problemów

Przy używaniu AI dla Elixir:

  • Nie ignoruj zasad OTP
  • Unikaj wzorców mutable state
  • Pamiętaj, że procesy są tanie
  • Używaj supervisorów odpowiednio
  • Testuj kod współbieżny dokładnie