раздел 25

Effect-TS

Архивный курс, больше не обновляется: актуальный Effect живёт в «Effect: Тихая Академия» (46). Effect-TS от Effect<A,E,R> и Schema до Stream, STM, batching, terminal. Сквозной проект Pulse, мониторинг URL: один Layer-граф, две поверхности (CLI на @effect/cli и HTTP-сервер на @effect/platform-node), общий runtime. Дальше блок Functional DDD на Effect и продовые уроки.

27 уроков37 тем · 13 кластеров

Начать раздел
Хочу пройти

Раздел открыт для всех. Войди, чтобы отмечать пройденные уроки, вести заметки и решать задачи в редакторе. войти

Уроки раздела

  1. Effect intro: Effect<A, E, R>, gen, runtime, первый probeM~80 мин
  2. Schema: parse-don't-validate, branded типы, transformM~130 мин
  3. Tagged-ошибки: actionable vs unactionable, catchTag, Cause, matchEffectM~140 мин
  4. Services и Layer: Context.Service, Layer, make, ManagedRuntime, MemoMapMS~150 мин
  5. Resources: Scope, finalizers, acquireRelease, forkScoped, graceful shutdownMS~110 мин
  6. Файберы и concurrency: fork, join, interrupt, Effect.all, Semaphore, raceMS~140 мин
  7. Координация: Deferred, Queue, PubSub, Semaphore, LatchS~130 мин
  8. Транзакции: TxRef, TxQueue, Effect.tx, ABA, тесты транзакцийS~120 мин
  9. Stream и Channel: pull vs push, callback, buffer, grouped, merge, broadcastS~140 мин
  10. Batching: Request, RequestResolver, dataloader, кеш с TTLS~120 мин
  11. Runtime и Schedule: retry, repeat, timeout, race с fallbackMS~140 мин
  12. Production-обвязка: CLI, Terminal, HTTP-серверMS~140 мин
  13. Testing и code style: TestClock, dual, branded, Do, Data, финальный чек-листMS~170 мин
  14. DDD-типы: branded, opaque, smart constructors на SchemaMS~60 мин
  15. Decider pattern на Effect.gen: decide, evolve, initialS~70 мин
  16. Event Store на @effect/sql-pg: append-only, optimistic concurrencyS~70 мин
  17. CQRS-проекции: Daemon, SubscriptionRef, live read-modelS~70 мин
  18. Observability: логи, спаны, метрики, OpenTelemetryS~100 мин
  19. HttpClient и обвязка API: ретраи, схемы, middleware, CORS, OpenAPIS~100 мин
  20. Config, секреты и platform: FileSystem, Path, Command, KeyValueStoreMS~90 мин
  21. Schema, второй заход: рекурсия, все ошибки сразу, async-валидация, ArbitraryS~90 мин
  22. Schema как контракт для модели: JSON Schema, починка ответа, потоковый разборS~80 мин
  23. Sink и продвинутый Stream: приёмники, пакеты, DLQ, состояние по ходуS~80 мин
  24. Стандартная библиотека Effect: равенство, коллекции, порядок, деньги, времяMS~80 мин
  25. Инструменты и отладка: LSP, диагностики в CI, layerinfo, Cause, файбер-дампMS~80 мин
  26. Архитектура бэкенда на Effect: слайсы, очередь на Postgres, outbox, воркерS~150 мин
  27. HKT и TypeLambda: один код над Effect, Stream и ResultS~90 мин

Понятия курса

Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.

Старт

Данные и ошибки

Сервисы и ресурсы

Параллелизм и координация

Стримы и батчинг

Production-обвязка

Качество и тестирование

DDD в Effect

  • DDD-типы: branded, opaque, smart constructorsReservation-домен на Schema: ReservationId, GuestEmail, RoomNumber, DateRange с инвариантом checkIn<checkOut, Money с currency mismatch на типах. Парсим один раз на границе, дальше типы держат гарантии.урок 14 · DDD-типы: branded, opaque, smart constructors на Schemaопираются: урок 15
  • CQRS-проекции: Daemon и SubscriptionRefРазделение write/read. Проекция как чистая (state, event) -> state, но материализованная как live view через SubscriptionRef. Daemon-файбер форкается под Scope, держит read-model в актуальном состоянии. UI подписывается через SubscriptionRef.changes, без polling.урок 17 · CQRS-проекции: Daemon, SubscriptionRef, live read-model
  • Decider pattern на Effect.genКанон Жереми Шассена: decide + evolve + initial. Команды отвергаются, события навсегда. Reservation FSM (NotPlaced -> Reserved -> CheckedIn -> CheckedOut/Cancelled) как пять чистых функций. Verify(scenario) как стандартный тестовый паттерн.урок 15 · Decider pattern на Effect.gen: decide, evolve, initialопираются: урок 16
  • Event Store на @effect/sql-pgAppend-only events в Postgres. Уникальность (stream_id, version) даёт optimistic concurrency. PgClient.layer плюс Schema-декод payload. Replay стрима через decider.evolve восстанавливает state без снимков.урок 16 · Event Store на @effect/sql-pg: append-only, optimistic concurrencyопираются: урок 17, урок 26

Observability и обвязка

  • Config и Redacted: конфигурация как декларация, секреты без утечекConfig описывает, что прочитать, ConfigProvider откуда. Примитивы сразу дают готовые типы (URL, Duration, port), недостающие ключи приходят все сразу одним сообщением, секреты живут в Redacted и печатаются как redacted.урок 20 · Config, секреты и platform: FileSystem, Path, Command, KeyValueStoreопираются: урок 21
  • Platform: FileSystem, Path, Command, KeyValueStoreФайлы, пути, внешние процессы и key-value хранилище как сервисы, а не как импорты из node. Тот же код работает в Node, Bun и браузере, подменяется в тестах и получает отмену с очисткой ресурсов бесплатно.урок 20 · Config, секреты и platform: FileSystem, Path, Command, KeyValueStoreопираются: урок 23
  • Логи и спаны: annotateLogs, Logger, withSpan, Effect.fnЛог как эффект: уровни, Cause вместо строки, аннотации на кусок программы вместо протаскивания requestId. Logger как сервис: json, pretty, свой через Logger.make, батчинг. Спаны через withSpan и Effect.fn, дерево вызовов с одним traceId.урок 18 · Observability: логи, спаны, метрики, OpenTelemetryопираются: урок 19
  • Метрики: counter, gauge, histogram, frequency, экспортШесть типов метрик и вопрос, на который отвечает каждый. Комбинаторы поверх эффекта (trackDuration, trackErrorWith) вместо ручных update. Теги через Effect.tagMetrics. Экспорт одним NodeSdk.layer в OTLP и Prometheus, либо свой /metrics через Metric.snapshot.урок 18 · Observability: логи, спаны, метрики, OpenTelemetryопираются: урок 25
  • Обвязка API: middleware, авторизация, CORS, OpenAPI, производный клиентHttpApiMiddleware.Tag описывает middleware контрактом из трёх полей: чем падает, какой сервис кладёт в контекст, откуда берёт данные безопасности. CORS и страница документации подключаются слоем. Клиент к своему API выводится из его описания и отдаёт типизированные ошибки.урок 19 · HttpClient и обвязка API: ретраи, схемы, middleware, CORS, OpenAPIопираются: урок 20
  • HttpClient: схемы ответов, retryTransient, подмена в тестахИсходящий HTTP как сервис: базовый URL и заголовки настраиваются один раз через mapRequest, статусы фильтруются filterStatusOk, временные сбои повторяются retryTransient. Ответ декодируется схемой, поэтому в канале ошибок отдельно живут сеть, статус и нарушенный контракт.урок 19 · HttpClient и обвязка API: ретраи, схемы, middleware, CORS, OpenAPIопираются: урок 22

Schema вглубь

Инструментарий

Архитектура

  • Архитектура бэкенда: слайсы, очередь на Postgres, outbox, воркерРазбор боевого платёжного шлюза на Effect: вертикальные слайсы внутри горизонтальных границ, kysely как билдер поверх SqlClient, ManagedRuntime как мост в чужой фреймворк, тонкие bin-точки входа с REPL, очередь на Postgres с тремя слоями идемпотентности, transactional outbox, шедулер с лестницей ретраев и якорем даты.урок 26 · Архитектура бэкенда на Effect: слайсы, очередь на Postgres, outbox, воркер

Типы и полиморфизм