TypeScriptでDDDを学ぶためのOSS紹介

Published on
Authors

この記事では,TSでDDDが実践されたOSSであ るstemmlerjs/ddd-forumを紹介します.

ドメイン駆動設計をTypeScriptで学びたい

ドメイン駆動設計(DDD)とは,エリック・エヴァンスの提唱したソフトウェア設計手法 です.

エリック・エヴァンスのドメイン駆動設計の原著が発売さ れたのは2004年ですが,2021年現在においても,DDDの解説書籍の発売やカンファレ ンスが開かれるなど,勢いを増し続けています.

DDDにまつわる書籍では,サンプルコードとして,JavaやC#が用いられることが多いで す.

例えば,Evans本と実践ドメイン駆動設計はJavaで書か れています.

僕は普段は,バックエンドもフロントエンドもTSを書くことがとても多いです.最近は TSを使われている方は多くなってきているのではないでしょうか.

TSは,JavaやC#と大きく離れた言語ではないと思うので,同じような雰囲気でなんと なくは読めると思います.それでも,当然ですが各言語にそれぞれ特性があるので,慣れ ている言語で設計手法(ここではDDD)に触れたいです.

そんなある日,stemmlerjs/ddd-forumと いうTypeScriptでDDDを実践されたリポジトリを見つけました.

ddd-forumについて

stemmlerjs/ddd-forum-GitHub

Aboutにあるように,TypeScriptで,DDDで作ったHackernewsLikeなWebAppです .

READMEを参照するとBackendには,以下が使われています.

-Sequelize -Express.js -Redis

Frontendは,以下が使われています.

-React.js -Redux -Sass

アーキテクチャとして採用されているのは ,CleanArchitecture です.

-CleanArchitecture達人に学ぶソフトウェアの構造と設計 -実践クリーンアーキテクチャ-nrslib

作者のstemmlerjsさんは,ブログなども多く執筆されていたり,SOLID原則をテーマと したNode.jsでの設計についての本を書かれています.バックエンドもフロントエンド も参考になる情報を発信されているので,ありがたい限り.

-https://khalilstemmler.com/

ddd-forumを読む

Frontendは,Reactが使われていますが,ClassComponentのままであるため,FC中心 の現在,あまり熱心に読む必要は無いと思います.

僕は主に Backend(src/)のみを読 んでいます.

DDDをなす要素であるEntityやValueObject,Aggregator,Identifierなどのベース が,shared/coreに用意されています.modules配下に置くsubdomain内にて ,shared/coreのベースを利用しています.

また,RustやScalaなどにあるようなResult,Eitherなどがclass表現されており ,エラーハンドリングが綺麗に設計されています.

-https://github.com/stemmlerjs/ddd-forum/blob/master/src/shared/core/Result.ts

Guardというクラスを用意し,そのメソッドに複数のバリデーションが記述されています .このGuardクラスを様々なところから利用し,リクエストなどに対するバリデーショ ンを一元的に行っています.

undefinedやnull,値の大小や境界値の判別などを行うコードの数はどうしても多くな りがちだと思います.それ故,チーム開発だとメンバー各人の条件が用意され,コードに 統一感がなくなってしまいます.

コードの各所で,統一されたバリデーションを用いることで,かなりスッキリするなと思 いました.参画しているプロダクトの開発においても,取り入れたいです.

とても良いリポジトリだと思います.作者の方に感謝です.

以上,ddd-forumの紹介でした.