Вийшла нова версія 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 рази менший за кількістю рядків коду та кількістю файлів.

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Якщо ви питаєте за тести при розробці Ditsmod, то так, вони є, йдуть із закінченням *.spec.ts, наприклад, github.com/...​e/src/application.spec.ts, використовую jest.

Та я троллю)
Вы все таки известный в узких кругах ценитель Неста)

А, ясно. Ну після того як ви побачили кількість помилок в Pull Request, як ви вважаєте, грубо було з мого боку писати «Tests are written with numerous gross mistakes»?

Не сумнівався у такій вашій відповіді. Дасте лінк на ваш github-профіль? Там можна побачити хоча б десятки зірочок за ваші проекти?

Не знаю які у вас там профілі на github, але я можу хоча б похвалитись що у мене 128 зірочок на одному проекті, 78 — на іншому, 16 — ще на іншому. Я контрибутив для таких проектів як PHP, Twitter Bootstrap, Angular, VS Code, TypeScript і ще купа інших проектів, які я вже й не пам’ятаю. Я знаю як працювати в open source і яка там має бути культура дуже добре, не треба мене вчити цьому.

у вас в голові зірочка дірочка)

На жаль, на ДОУ тролів, типу вас, дуже багато. Це показує і та тема, звідки ви взяли цю цитату. Там більшість коментаторів та лайкерів проявили свою непрофесійність та некомпетентність, особливо це стало очевидним після згаданого вище Pull Request’у, де таки стали явними ті численні та грубі помилки, про які я писав.

Ну нічого, на своєму майбутньому ресурсі (аналог хабра) я блокуватиму представників русского мира, а це мабуть десь біля 80% від усіх тролів на ДОУ.

P.S. Решту тролів залишу щоб трафік веселіший був =).

на своєму майбутньому ресурсі

Представляю как вы наводите порядок на своём ресурсе аналоге Гитхаба)

На щастя, на github відсоток представників русского мира мізерний, тому створювати аналогічний ресурс не має сенсу.

А на вашем-то откуда возьмутся?)

най буде, най пробують звичайно, але..., як на мій хлопський розум, react, angular, vue, svelte можуть не хвилюватись і навряд чи будуть запозичувати якісь рішення у Ditsmod... Чи хтось вважає інакше?

Нагадаю, Ditsmod — це бекенд фреймворк, причому він не претендує на нові концепції в програмуванні на TypeScript, він застосовує вдалі концепції Angular.

Підписатись на коментарі