Чаму NestJS ўзьме першасць для команд і баз кода, які растуць
Чаму NestJS падходзіць для команд, які растуць у частцы бэкенду: прымусовая структура, ввод залежнасцяў і дизайн, які прыорітэтавае TypeScript, што дапамагае падтрымваць адносна аднородную велікую базу коду на Node.js.
Большая частка разработчыкаў бэкенду не пераходзяць на NestJS таму, што яны захоплены декоратарамі.
Яны пераходзяць таму, што ў яных выкараналіся сілы.
Выкараналіся сілы ад неабходнасці працаваць з кодам, дзе кожны папака, здаецца, выконвае своія сабэйскія правілы.
Выкараналіся сілы ад неабходнасці разбірацца з бізнес-логікай, якая розпадаецца між кантролерамі, мідлвэрамі та разнымі файламі-інструментамі.
Выкараналіся сілы ад проектаў, якія працавалі нормальна з колькаю інжынерамі, але ставалі хаотычнымі, калі команда вырасла да двадцяці чалавек.
Багато прыкладоў застосоў Express спачатку ўжо є чыстымі: просты server.js, калькі рутаў, адна з’яєднанне з базай дадзеных. Чэрез калькі месцаў логіка входу пераходзіць у мідлвэр, правілы верыфікацыі копіююцца ў разныя месцы, сервісы вызываюць адзін другога ў циклах, і ніхто не смеяцца чыпляцца да модуля роўнаважэння, таму што всі бяжаць ад таго, каб не зламаць ўсё у прымэтным режыме.
Проблема ніколи не была самай фреймворк.
Це была нехватка структуры.
NestJS здобуў популярнасць таму, што ён забезпечвае командам структуру раніше, чым вони досягнуць таго критическага моменту.
Ён змушвае до адноснасці, у працоўку на яе
Адным з главных фактараў падыходжання NestJS ёст тое, як адноснасць надае проектам.
У тыповай базе коду Express кожны інжынер прагне арганізаваць файлы своім спосабам.
Одна людзь дадае папку utils.
Іншы воліе helpers.
Іншы разработчык кладзе вызывы базы дадзеных працоўка ў самыя контролеры.
Іншы стварае окремую папку services.
Нічыга з гэтага не ламае прыстройку.
Але гэта значыць, што ніхто не можа спакою прадзіць, дзе будзе знаходзіцца адны ўзель логіки.
NestJS ухіляецца ад большай часткі гэтых разнакоў, прымушваючы всіх следаваць спяльнай, прагнозавальной архітэктуры.
src/
├── users/
├── auth/
├── products/
├── orders/
Kожны модуль адмініструець свой кантролер, сервіс і логіку бізнесу.
Новачак можа шырэй адразу зразумець структуру, таму што кожны функцыянал ствараецца адносова.
Назвы конкрэтных папак не ўсё.
Важна еднаковасць.
Вывад: Команды працуюць шырэй, калі кожны элемент кодавой базы следуе аднаковым архітэктурным правілам.
Ін’екцыя залежнасцей рашае проблемы яшчэ перад тым, як яны з’являюцца
Багато разработчыкаў скептычна ставяцца да ін’екцыі залежнасцей, калі впершынę з яё сталкуюцца.
Гэта можа здавацца дапынным ритуалам.
За што трэба вводзіць сервіс, калі павольна імпортацыя восьміцца?
Таму што кодавыя базы не застаюцца маленькімі.
Уявіце сабе сервіс аутэнтыкацыі, які безпосередна імпортуе сервісы паштоў, прыема ўпавямоў, аналітыкі і платежаў.
Цячас усе жорсткая спаяна разам.
Автарыстанне тэстаў стае вялікай працой.
Замена адной з рэалізацый становіцца рызыкавай.
NestJS спрыяе слабаму з’ўязку, паводліваючыся прынцыпам ін’екцыі залежнасцей.
constructor(private readonly authService: AuthService) {}
На першы погляд, гэта здаецца простым.
Але самэ гэта дапамагае кантролюваць тэставанне, мокінг і замену рэалізацый, калі проект становіцца большым.
Большыя команды цэнююць гэта, таму што гнучкасць становіцца важлівейшай, чым трымкатковая зручнасць.
Вывад: Слабы з’ўязак — это інвестыцыя, якая сабе прадаецца, калі ваша аплікацыя становіцца сложнейшай.
Гэта стварае вражанне фреймворку, а не проста бібліятэкі
Express дае разработчыкам вельмі большую свабоду.
Інодзе большую, чым ёй трэба.
NestJS займае працупакісную пазыцыю.
У працупакіснасці ён не заставляе вас самых прымкнуць да патрэбных рашэнняў.
«Як мне структураваць процэдуру аутантыкаціі?»
Ужо існуюць усталеныя шаблоны для ціх задач.
Захавальнікі.
Інтэрцепторы.
Каналы передачы дадзеных.
Модулі.
Прадастальнікі.
Фільтры абэчакоў.
Кожны з іх мае чыста вялічыну задачы.
Это значыць, што разработчыкі менш спарываюцца па архітэктуру і прыдзеляюць больш часу рэальным бізнес-праблемам.
Усё гэта не пазбавляе гнучкасці.
Це проста адмахвае рашэння, якія не трэба прымыкаць з нуля.
Вывад: Хорашы фрэймворк зменшае вялічыну рашэнняў, не пазбавляючы разработчыка контролю.
TypeScript — першакласны элемент
Сістэмы бэкенду рэдка калі застаюцца маленькімі праўда дзялей часу.
Калі расширваецца API, таксама зростае колькість модэляў, DTO-ў, інтэрфейсаў і служб.
NestJS быў створаны з TypeScript як сваёй асновай з самага пачатку.
Абсалютная типаверыя выявляе адміністрацыйныя памылкі пад час напісання коду, а не пасля яго развяроцьбы.
createUser(dto: CreateUserDto) {
return this.usersService.create(dto);
}
Ваш рэдагараў дае болей развітыя функцыі автадаптавання.
Рефакторынг стае значна менш рызыкавым.
Большыя базы коду застаюцца здолжлівымі да адтульнення працаваць дольшы час.
Звычны JavaScript таксама працуе чыста.
Але TypeScript становіцца справжнім актываў, калі больш аднае дзейнікаваеся з тым самым бэкендам.
Вывад: Абсалютная типаверыя зазвычай значыць меньш неспадзянак, калі код прайходзіць у працэйную среду.
Ён спрыяе лёгкам расшырэнню команды
Кераванне большым трафікам — гэта тое, чым большасць фреймворкаў бэкенду справляецца досыта добра.
Кераванне расшырваючыцца камандай дзейнікаў — гэта зусім іншая задача.
Калі колькасць учаснікоў праекту зростае, няэфектывнасць у кодавой базе быстра стае справжнім пераканалом. Адны модулі могу прабавляць вхідныя даны сваім способам, іншыя — логаваць падзеі адміністрацыі інача, а ўсё іншыя — використоўваць сваю схему обробкі асаблівых ситуацый.
NestJS зменшае гэты хаос, прымушваючы всіх дотрымацца спакойных стандартаў у всей кодавай базе.
Разработчык, які розумее модуль аутентыкацыі, можа без вялікіх трудносцэў перейść да модуля платежаў, адколі базовая структура застаецца той самый у всіх частках.
Гэтае знайомства прыводзіць да меншых неспадзянак і шырэйшага часу адклікання новых спецялаў.
Вывад: Моцная архітектура не толькі дапамагае серверам расшырюватыся — яна таксама дапамагае командам.
Вбудованыя функцыі заўсёды эканомяюць тыячы роўней коду
Express дае вам порожняю плошчу для творчасці і дазволяе будаваць усё з нуля.
NestJS дае вам абсалютна ствароцентральная платформа.
Патрабуецца пераканаліць прыходзячыя даны? Ожывайте Pipes.
Патрабуецца логіка аутантыкаціі? Ожывайте Guards.
Патрабуецца адна ўстановка для ловлення та форматавання абэрасцей? Ожывайте Exception Filters.
Патрабуецца логаванне чы адкорэгаванне запитоў? Ёсць Interceptors.
Уместо таго, каб склеіваць дзесяткі аддзельных пакетаў npm, каманды выкарыстоўваюць ужо створаныя шаблоны для часта падчынююцыхся задач бэкенду.
Это дазволяе скасаваць час, які ўтрачаецца на стварэнне інфраструктуры, і прыдзеліць больш часу на рэальную разработку продукту.
Вывад: Скасаванне зайвага коду вымоўляе час для рашэння проблем, якія дзейсна маюць значэнне для бізнесу.
Корпаратыўныя каманды жадаюць прыведжамасці
Большасць стартапаў спачатку выбірае Express, таму што ён просты і лёгкі для вывучэння.
Але калі прыкладненне дагучае, яго патрабаванні зменшваюцца.
Команды расширваюцца.
Колькісць канцэнтраў прыбывае.
Прыўлекаюцца новыя інтеграціі.
У такі момент проект пачынае выклікаць патрэбу ў справжніх стандартах.
Самэ гэтае ўмова, калі NestJS падтверджвае свою цэннасць.
Большыя організацыі вярнуцца да прагнозавальной структуры, таму што системы, пабудованы такім способам, простейшае для падтрымкі, аналізу, тэставання і расшырэння з часам.
Мета — не ствараць больш коду.
Мета — ствараць код, які за два гады будзе ўсё такі ж зрозумелы.
Вывад: Даўгастраўная падтрымкі часта мае большое значэнне, чым швальнасць выпуску ў першы дзень.
NestJS спрыяе кращым інжынерскім прычынкам
Іспользованне NestJS не будзе аўтаматычна ператвараць каго-небудзь у аднароднейшага інжынера.
Яго мета — падкрэсліць для разработчыкаў тыя прыкметы, на якія вжо паслугваюць апытныя інжынеры.
- Выкарыстоўванне бізнес-логікі не ў контролерах.
- Стварэнне модуляў з чыста адмежаваным дыапазонам функцый.
- Апылканне методу вводу залежнасцяў.
- Адраднае застосоўванне пераканальнай верыфікацыі дадзеных.
- Централізаваная обработка адносоў.
Следаванне гэтым патэрнам запобiegае накопленню тэхнічнага боргу з самага пачатку.
Фрэймворк забезпечвае неабходную структуру.
Аднак команда яшчэ должна практыкуваты дисцыпліну, каб правільна яго выкарыстоўваць.
Вывад: Хорашы фрэймворк спрыяе формаванню хорашых прыкмет, але ніколі не можа заменіць правильную інжынерную думку.
Заключэнне
NestJS продовжае завойвання, таму што разработка бэкенду сёньня — гэта не проста стварэнне API, якое правільна адпавядае на запыты.
Йдзе пра падбір систем, які застаюцца зрозумелымі нават тады, калі команды, наборы функцый і обсяг трафіку продовжваюць расшыроўвацца.
Express застаецца выгодным выборам для маленькіх проектаў, шыракоўскіх пратотыпаў або разработчыкаў, якія хочуць максимальную гнучкасць з мінімальнымя обмежэннямі.
NestJS стае прыемлівейшым варыянтом, калі адпаведнасць, зручнасць адтрымання і масштабаванне пераважаюць над прыемлівасцю мінімалістскай наладкі.
Сама фрэймворк не ўсё такі важлівы фактар.
Архітектура, якую ён выкарыстоўвае, — гэта тое, што мае значэнне.
І гэта прычына, чаму все большая колькасць команд для роботы з бэкендам ўсё гады выбірае NestJS.