Size: a a a

2020 March 27

AM

Andrey Melikhov in Node.js SPb
Хотя да, статический анализ теоретически
источник

с

сomorsiс in Node.js SPb
Andrey Melikhov
а кто будет проверять соответствие контракту?
это уже дело тайпскрипта
источник

AM

Andrey Melikhov in Node.js SPb
Камиль на Holy.js сказал, что пока в nest точно такого не будет
источник

AV

Alexey Vykhrystyuk in Node.js SPb
Andrey Melikhov
Инжектить на токенах, а не на классах
Раскрой, пожалуйста, тему токенов поподробней, эта сущность где объявлена? Откуда токены импортятся, из nest? Не получится ли тогда что бизнес логика завязалась на nest?
источник

с

сomorsiс in Node.js SPb
Alexey Vykhrystyuk
Раскрой, пожалуйста, тему токенов поподробней, эта сущность где объявлена? Откуда токены импортятся, из nest? Не получится ли тогда что бизнес логика завязалась на nest?
Не, для токенов отдельный модуль
Он никак от Неста не зависит
источник

AV

Alexey Vykhrystyuk in Node.js SPb
хотелось бы писать так чтоб nest можно было оторвать, выкинуть и заменить
источник

AM

Andrey Melikhov in Node.js SPb
Alexey Vykhrystyuk
Раскрой, пожалуйста, тему токенов поподробней, эта сущность где объявлена? Откуда токены импортятся, из nest? Не получится ли тогда что бизнес логика завязалась на nest?
токены — это чать IoC неста. Конечно, в бизнес-логику протягивать IoC не нужно
источник

AM

Andrey Melikhov in Node.js SPb
для получения зависимостей у тебя есть aplication services там ты забираешь из IoC нужные зависимости и закидываешь уже в бизнес-логику. Готово, фреймворк не проник в бизнес-логику )
источник

AV

Alexey Vykhrystyuk in Node.js SPb
тоесть в итогде резолвишь сам ручками “по бедному” :)
источник

AM

Andrey Melikhov in Node.js SPb
ну не совсем, ты забираешь красиво, но дальше закидываешь ручками в конструктор, да. Но все фабрики остаются внутри IoC
источник

AV

Alexey Vykhrystyuk in Node.js SPb
сomorsiс
Не, для токенов отдельный модуль
Он никак от Неста не зависит
https://docs.nestjs.com/fundamentals/custom-providers#non-class-based-provider-tokens
@Injectable()
export class CatsRepository {
 constructor(@Inject('CONNECTION') connection: Connection) {}
}

The @Inject() decorator is imported from @nestjs/common package.
источник

AM

Andrey Melikhov in Node.js SPb
конечно,
@Inject
это часть неста, в бизнес-логике ему не место
источник

AM

Andrey Melikhov in Node.js SPb
как и
@Injectable
источник

с

сomorsiс in Node.js SPb
Alexey Vykhrystyuk
https://docs.nestjs.com/fundamentals/custom-providers#non-class-based-provider-tokens
@Injectable()
export class CatsRepository {
 constructor(@Inject('CONNECTION') connection: Connection) {}
}

The @Inject() decorator is imported from @nestjs/common package.
Это не токены же
источник

с

сomorsiс in Node.js SPb
Всмысле токен здесь 'coonection'
источник

с

сomorsiс in Node.js SPb
Никто не мешает вынести его
источник

AM

Andrey Melikhov in Node.js SPb
токен — это метка, сам по себе он бесполезен
источник

AV

Alexey Vykhrystyuk in Node.js SPb
а получится ли писать бизнес логику с использованием инфраструктуры nestjs (DI не ручками) но без проникания ее в код?
например если вместо интерфейсов и токенов будем принимать в ctor abstract class

cats-repository.ts:

export class CatsRepository extends AbstractCatsRepository {
 constructor(connection: AbstractConnection) {}
}


app.module.ts:

@Module({
 providers: [
   CatsRepository,
   {
     provide: AbstractConnection,
     useValue: ConcreteConnection,
   }
 ],
})
export class AppModule {}


примерно так мы пишем код на C# только у нас есть interfaces (в runtime) всесто abstract classes
источник

NM

Nikolay Matvienko in Node.js SPb
Ну он будет только в конструкторе. При необходимости убираете декоратор и все. Код независим, можно в другой проджект вставить. Либо написать обертку, и свой кастомный декоратор, если код может быть переиспользован в другом месте где будет другой IoC контейнер, или вовсе не будет.
источник

AM

Andrey Melikhov in Node.js SPb
в тесты инфрастуктура всё равно проникнет
источник