TypeScriptでDDDを学ぶためのOSS紹介
- Published on
- Authors
- Name
- unvalley
- @unvalley_
この記事では,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について
Aboutにあるように,TypeScriptで,DDDで作ったHackernewsLikeなWebAppです .
READMEを参照するとBackendには,以下が使われています.
-Sequelize -Express.js -Redis
Frontendは,以下が使われています.
-React.js -Redux -Sass
アーキテクチャとして採用されているのは ,CleanArchitecture です.
-CleanArchitecture達人に学ぶソフトウェアの構造と設計 -実践クリーンアーキテクチャ-nrslib
作者のstemmlerjsさんは,ブログなども多く執筆されていたり,SOLID原則をテーマと したNode.jsでの設計についての本を書かれています.バックエンドもフロントエンド も参考になる情報を発信されているので,ありがたい限り.
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の紹介でした.