TGViewer
Node.js Backend | YeaHub Node.js Backend | YeaHub @yeahub_node_backend · 465 subscribers
Post #446 202
🥰 useValue и useFactory в Nest.js — и при чём тут SOLID

Что это вообще такое
1) useValue — подставляет готовый объект/примитив по токену. Удобно для конфигов и моков
2) useFactory — создаёт значение через фабрику (функцию). Может быть async, можно внедрять зависимости, менять логику по окружению

Оба — это способы объявить провайдеры без привязки к конкретному классу

useValue — конфиг и моки

export const CONFIG = Symbol('CONFIG');

@Module({
providers: [
{ provide: CONFIG, useValue: { apiBase: 'https://api.dev', timeout: 3000 } },
],
exports: [CONFIG],
})
export class ConfigModule {}


Тест с моками:

useFactory — фабрика с зависимостями и режимами
export const PAYMENT_GATEWAY = Symbol('PAYMENT_GATEWAY');

@Module({
providers: [
{
provide: PAYMENT_GATEWAY,
useFactory: (cfg: ConfigService) => {
const isProd = cfg.get('NODE_ENV') === 'production';
return isProd
? new StripeGateway(cfg.get('STRIPE_KEY'))
: new FakeGateway(); // быстрая локальная разработка
},
inject: [ConfigService],
},
],
exports: [PAYMENT_GATEWAY],
})
export class PaymentModule {}



💀Причём тут SOLID, буква D (Dependency Inversion)

Принцип инверсии зависимостей: высокоуровневые модули не зависят от низкоуровневых; оба зависят от абстракций
— В Nest абстракция = инъекционный токен (строка/символ), а не интерфейс TypeScript (он стирается в runtime)
— useValue/useFactory позволяют под этот токен подложить любую реализацию без изменения кода потребителей

😱 Итог
useValue/useFactory — это практические инструменты для реализации D из SOLID в Nest.js: вы зависите от абстракций (токенов) и свободно подменяете реализации. Так код становится тестируемее, модули — слабосвязанными, а конфигурация — гибкой. Используйте useValue для констант и моков, useFactory — для динамики и асинхронной инициализации

🚀 Пост Guru Node.js: @DemetraIT
  • ❤ 1
More from @yeahub_node_backend
  1. Oct 9, 2026#book #начинающие 📚 Node.js: разработка приложений в микросервисной архитектуре с нуля Ос…
  2. Oct 8, 2026#Собес #volume #bind #mount 🤔 Как считать данные, записанные контейнером? 💬 Кратко: Данн…
  3. Oct 7, 2026#Собес #event_loop #main_thread #blocking 🤔 Заблокирует ли бесконечный цикл взаимодействи…
  4. Oct 5, 2026#Собес #event_loop #asynchronous #nodejs 🤔 Что такое process.nextTick() 💬 Кратко: proces…
  5. Oct 2, 2026#podcast #все 📚 Kolesa Podcast Podcast by IT-компания Kolesa Group. В целом он обо всём и…
  6. Oct 1, 2026#Собес #date #timestamp #interval 🤔 Как работать с датами и временными интервалами в SQL?…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →