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

バイトルPROソフトウェアアーキテクチャ再設計の取り組み

dip-hiroshi-yoneda
June 30, 2022
550

 バイトルPROソフトウェアアーキテクチャ再設計の取り組み

【Lancers x dip】Engineer Meetup のLT資料です。

- オニオンアーキテクチャでレイヤー毎の責務と依存関係の整理
- 戦術的DDDでコンポーネント毎の責務を整理

dip-hiroshi-yoneda

June 30, 2022
Tweet

Transcript

  1. https://www.dip-net.co.jp/ 6 Domainディレクトリの課題 Component 認証系・ファイル操作・リクエスト処理 ドメインとは関係無い処理が含まれてい る Application ユースケースの⼿続きを⾏う処理 (トランザクションスクリプト)

    肥⼤化したメソッドが作られがち Domain リポジトリのインターフェイス・ WEBAPIのDTO コアなドメインコンポーネンツが存在 していそうだが無い
  2. https://www.dip-net.co.jp/ 7 Infrastructureディレクトリの課題 Oauth 認証系APIのエンドポイント単位の実装 をしているリポジトリという名前のコン ポーネント Core 主要APIのエンドポイント単位の実装をして いるリポジトリという名前のコンポーネント

    双⽅ともリポジトリの実装が集約の単位にな っておらず、リポジトリというコンポーネン ト名と実装内容が⼀致しておりませんでした。 ※参考 https://qiita.com/mikesorae/items/ff8192fb9cf106262dbf (やはりお前たちのRepositoryは間違えている)
  3. https://www.dip-net.co.jp/ 15 戦術的DDD(ドメイン駆動設計)とは、ビジネスロジックのモデルを中⼼に 設計するパターン集となります。 主なコンポーネントの種類 • Entity:ビジネスロジックのモデル≒ 集約 • Value

    Object:ビジネスロジックをもった値 • Domain Service:ビジネスロジック的意味をもつ⼿続き処理 • Application Service:ユースケースを実現する⼿続き処理 • Repository:集約を永続化したり、データから集約を作成する処理 戦術的DDDのご紹介
  4. https://www.dip-net.co.jp/ 19 コンポーネントの格納先ディレクトリ ←Entity・Value Object・DomainService ←Repository ←Controller・View Model (DDDのコンポーネントではない) ←Application

    Service ここで紹介されていないコンポーネントも他にたくさんありますが、 各ディレクトリのメインとなるコンポーネントがきまり、 ディレクトリの責務と格納されるコンポーネントの責務を ⼀致させることができました。