Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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で書きやすいライブラリは未整備な状態。