Вийшла нова версія Ditsmod — 2.0 (із RealWorld прикладами)
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Для тих, хто не знайомий з Ditsmod, це NodeJS фреймворк, написаний на TypeScript. На офіційному сайті можна прочитати більше технічних характеристик цього фреймворка.
Швидкий старт
Щоб почати працювати з Ditsmod 2.0, ви можете клонувати ditsmod/seed:
git clone https://github.com/ditsmod/seed.git ditsmod-app cd ditsmod-app yarn
Також ви можете проглянути Ditsmod застосунок, що містить реальний приклад (CRUD, авторизація, інші патерни), де реалізовано так званий RealWorld spec and API.
Хоча вже вийшла друга версія Ditsmod, але більшість користувачів взагалі не знайомі з цим фреймворком, отже я спробую тут презентувати його в загальних рисах, як в перший раз.
Головні особливості Ditsmod:
- Модульна архітектура на декораторах, що дозволяє вам декларативно описувати структуру застосунку.
- Зручний механізм вказання та вирішення залежностей між різними класами застосунку: в конструкторі ви вказуєте інстанси яких класів вам потрібні, а DI бере на себе непросту задачу «як це отримати».
- Можливість писати власні розширення (інколи їх ще називають плагінами), що можуть асинхронно ініціалізуватись та залежати одне від одного.
- Можливість динамічно додавати та видаляти модулі після старту вебсервера без необхідності рестарта.
- Має підтримку OpenAPI та можливість робити валідацію HTTP-запитів, використовуючи метадані OpenAPI.
- На сьогодні Ditsmod є одним із найшвидших серед Node.js веб-фреймворків.
Приклад контролера:
import { Controller, Res, Route } from '@ditsmod/core'; @Controller() export class HelloWorldController { constructor(private res: Res) {} @Route('GET') tellHello() { this.res.send('Hello World!'); } }
Приклад модуля, що має контролери:
import { Module } from '@ditsmod/core'; import { Params } from '@models/params'; import { ArticlesController } from './articles.controller'; import { CommentsModule } from './comments/comments.module'; import { DbService } from './db.service'; import { FavoriteModule } from './favorite/favorite.module'; @Module({ imports: [ { prefix: 'comments', module: CommentsModule }, { prefix: 'favorite', module: FavoriteModule }, ], controllers: [ArticlesController], providersPerReq: [DbService] }) export class ArticlesModule {}
Приклад модуля, що має одні лише сервіси:
import { Module } from '@ditsmod/core'; import { JwtModule } from '@ditsmod/jwt'; import { AuthService } from './auth.service'; import { BearerGuard } from './bearer.guard'; import { ModuleConfigService } from './config.service'; import { CryptoService } from './crypto.service'; import { PermissionsGuard } from './permissions.guard'; const jwtModuleWithParams = JwtModule.withParams({ secret: process.env.JWT_SECRET, signOptions: { expiresIn: '1y' } }); @Module({ imports: [jwtModuleWithParams], providersPerMod: [ModuleConfigService], providersPerReq: [BearerGuard, CryptoService, AuthService, PermissionsGuard], exports: [BearerGuard, CryptoService, AuthService, PermissionsGuard] }) export class AuthModule {}
Ditsmod vs NestJS
Ditsmod схожий на NestJS тільки через те, що обидва ці фреймворки у своїй архітектурі мають схожі концепції із Angular. Але Ditsmod під капотом не має Express, Fastify чи іншого фреймворку. Ditsmod на 11% швидший за NestJS+Fastify, при умові що інстанси контролера створюються за кожним запитом. І більш ніж удвічі швидший за NestJS+Express. Ditsmod також споживає значно менше пам’яті у порівнянні із NestJS.
Завдяки системі розширень, застосунки Ditsmod є більш експресивними, а тому потребують написання меншого об’єма коду. Наприклад, якщо ви порівняєте модулі OpenAPI, написані на Ditsmod та NestJS, виявиться, що модуль Ditsmod більше ніж у 3,5 рази менший за кількістю рядків коду та кількістю файлів.
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів