TypeScript のサーバサイドフレームワーク – NestJS と Marble.js で書き比べ

TypeScriptから見た classベース と functionalベース

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

TypeScript のサーバサイドフレームワーク – NestJS と Marble.js で書き比べ

サーバサイドの言語として、python, Go など 多様な言語があります
フロント側が Single Page Application の場合は
TypeScriptで実装すると メリットが多いはずです

下記で登場した、TypeScriptのサーバサイドフレームワークと実装の違いを見ていきます
TypeScript のメリット – Front と Server の架け橋

サーバサイドフレームワーク

NestJS

Angularのような書き心地でコードが書けます
Decoratorでルーティングをします
classベースの実装です

https://nestjs.com

Marble.js

RxJSのような書き心地でコードが書けます
chainで一致させルーティングをします
functionalベースの実装です

https://docs.marblejs.com

NestJS と Marble.js で書き比べ

NestJS

公式 sample

http://api.com/cats を get された場合

Decoratorで処理していく手法です
GetDecoratorimport
findAll -> this.catsService.findAll の流れ

import { Get } from '@nestjs/common';

class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

Marble.js

公式 sample

http://api.com/me を get された場合

chainで処理していく手法です
EffectFactoryからchain
matchPath -> matchType -> use(getMeEffect$) の流れ

const getMe$ = EffectFactory
  .matchPath('/me')
  .matchType('GET')
  .use(getMeEffect$);

classベース と functionalベース

classベースの方が馴染みのある方が多いと思います

オブジェクト指向プログラミングは1兆ドル規模の大失敗なのか?

の影響もあり別の手法を知ることは良い事だと思います

functionalベースのコードだと流れるようにコードリードができ
ポイントフリースタイルでの、テストのしやすさなどメリットがあります

まとめ

プログラミングは、料理に似ていると思っています
同じ素材を使い 同じ結果を 目指しても そこに至る過程 に違いが生まれます
classベース と functionalベース 双方を比較して
雰囲気を掴んでもらえればと思います