Slide 1

Slide 1 text

TypeScriptでDDD RepositoryとEntity編

Slide 2

Slide 2 text

自己紹介 ・不動産Techで働いてます。 ・Java/Scala/Ruby + ちょっとjs ・Web↔SI双方の技術を高めたい ・Node.js / TypeScriptでDDDしてみたい モチベーション @mrdShinse @Shinse Tanaka

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

話すこと

Slide 5

Slide 5 text

https://github.com/mrdShinse/eve-linebot

Slide 6

Slide 6 text

ディレクトリ構成 ./app/application →アプリ起動時の設定やドメイン処理に  必要な前処理などを書く。  今回だとExpress.jsの起動。 ./domain →アプリケーションが解決したい問題や  業務の処理を書く。 ./infra →各レイヤーを実装するために必要な  具体的処理が書かれる。  今回だとMongo関係の処理。

Slide 7

Slide 7 text

ドメインとライブラリ依存を切り離したい

Slide 8

Slide 8 text

domainパッケージ

Slide 9

Slide 9 text

エンティティの定義 User →Entityとして定義。 nameはValueObject として定義する。

Slide 10

Slide 10 text

リポジトリ用読み書きインターフェース

Slide 11

Slide 11 text

ユーザーリポジトリの定義

Slide 12

Slide 12 text

domainパッケージにはmongoの処理を入れない! 続いてinfraパッケージ

Slide 13

Slide 13 text

Mongoリポジトリ共通親クラス

Slide 14

Slide 14 text

ユーザーリポジトリ

Slide 15

Slide 15 text

いい感じに

Slide 16

Slide 16 text

所感 ・TypeScriptのGenericsはいい ・TypeScriptでちゃんと設計してあげる事で・・・ (jsでそれ必要?という議論はあるがw) ・エンジニアの技術力の差を吸収することができる。 ・仕様の変更や依存ライブラリの変更に強くなる ・結果として、Node.jsで業務寄りなプログラムを書きやすくなる。 ・mongooseだとdomainとinfraの切り分けはできない・・・?``` ・DDDで書きやすいライブラリは未整備な状態。