Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TypeScriptでDDD〜RepositoryとEntity編〜

 TypeScriptでDDD〜RepositoryとEntity編〜

We Are JavaScripters! @6th
https://wajs.connpass.com/event/54667/

2b5d9a4899bcf8eeb6b7a4078b9dead1?s=128

Shinse Tanaka

April 30, 2017
Tweet

More Decks by Shinse Tanaka

Other Decks in Programming

Transcript

  1. TypeScriptでDDD RepositoryとEntity編

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

    @mrdShinse @Shinse Tanaka
  3. None
  4. 話すこと

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

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

     具体的処理が書かれる。  今回だとMongo関係の処理。
  7. ドメインとライブラリ依存を切り離したい

  8. domainパッケージ

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

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

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

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

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

  14. ユーザーリポジトリ

  15. いい感じに

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