ドメイン駆動設計でモブワークしました #genbadeddd #mixleap

576 Views

November 07, 19

スライド概要

2019/8/31 にヤフー大阪オフィスで開催したドメイン駆動設計(DDD)のカンファレンスで発表したスライドです。実際の業務で「ドメイン駆動設計」と「モブプログラミング」を導入し、チーム全員で集まってビジネスドメインへの共通理解を築きながら開発を行ったので、その中で得た知見を共有します。

「Mix Leap Study 特別編 - レガシーをぶっつぶせ。現場でDDD! コラボカンファレンス」
https://yahoo-osaka.connpass.com/event/138020/
「設計の楽しさを伝えたい!「Mix Leap Study 特別編 レガシーをぶっつぶせ。現場でDDD!」を開催しました」
https://techblog.yahoo.co.jp/entry/20190909749503/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

ドメイン駆動設計で モブワークしました Mix Leap × レガシーをぶつぶせ。現場でDDD! 2019年8月31日 ヤフー株式会社 辻 陽平 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 Yohei TSUJI • 2019/1〜 ヤフー株式会社 • さまざまなサービスが稼働する プラットフォームの開発と運用をやっ てます。 • DDD歴 5年くらい • Scala、Java • @crossroad0201 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2

3.

この発表について 4月に編成された新チームで モブワークしながら ドメイン駆動設計を実践したので その知見を共有したいと思います Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3

5.

準備編 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

6.

ドメインを隔離できる アーキテクチャを採用する Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

7.

ドメインを隔離できるアーキテクチャを採用する Onion Architecture Hexagonal Architecture 画像引用元 - 実践ドメイン駆動設計 / Vaughn Vernon, 高木 正弘. 2015. - https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/ - https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7

8.

モブする範囲を決める Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

9.

モブする範囲を決める ● 開発のすべてをモブする必要はない。 • 手段(How)の部分はモブしなくていい。 • 何がどうあるべきなのか(What/Why)、 人の解釈を伴う部分はモブしながら共通 認識を作っていく。 ● つまりドメインレイヤ(とアプリケーショ ンレイヤ)だけモブすればOK。 モブはここだけ 画像引用元 - 実践ドメイン駆動設計 / Vaughn Vernon, 高木 正弘. 2015. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9

10.

マルチプロジェクト化する Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

11.

マルチプロジェクト化する ● アーキテクチャで論理的に分割しただけでは、 レイヤを無視したコードが書けてしまう。 ● モブ中の議論がついつい手段の話に行きがち になる。 ● マルチプロジェクト化してレイヤを物理的に 分割することでレイヤの制約を強制し、議論 の焦点をドメインレイヤに集中させる。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 11

12.

マルチプロジェクト化する ● Java/KotlinならGradleで、 Scalaならsbtで マルチプロジェクト構成を作れる。 ddd-example ・・・プロジェクトルート(Gitリポジトリ) /modules /adapter /api ・・・アダプタ層(WebAPI)のソース置き場 /rdb ・・・アダプタ層(データベース永続化)のソース置き場 /application ・・・アプリケーション層のソース置き場 /domain ・・・ドメイン層のソース置き場 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12

13.

実践編 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

14.

会話しながらコードを書く Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

15.

会話しながらコードを書く ● ドメインについての自分の理解・解釈を 声に出して会話することが重要。 ● 必要ならラフにモデル図を描いて会話。 ● だいたいのイメージが掴めてきたら、 コードに落としてみる、を繰り返す。 写真:アフロ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15

16.

ドメインとアプリケーション を行ったり来たりする Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

17.

ドメインとアプリケーションを行ったり来たりする ● ドメインだけ実装していると 終わりが見えなくなってくる。 ● アプリケーションサービスが、 ドメインの表現力を映す鏡になる。 ● アプリケーションサービスのコード が、その仕様をユビキタス言語で自 己文書化できているのが理想的。 アプリケーション サービス ドメインモデル Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17

18.

ドメインとアプリケーションを行ったり来たりする ● ドメインから書きはじめるのではなく、 あえてアプリケーションサービスから書き はじめて、コンパイルできるようにドメインを 書いていくのもアリ。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18

19.

アダプタの実装は 後回しにする Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

20.

アダプタの実装は後回しにする ● アダプタレイヤはいったん空実 装やダミー実装にしておいて、 本実装は後回しにする。 ● アダプタレイヤの実装をやりは じめると、ついつい意識が実現 手段に向いてしまい、ドメイン への注意力が切れてしまう。 ● アダプタレイヤの実装はモブし なくてもペアやソロで十分。 Web API アプリケーション サービス ドメインモデル リポジトリ実装 ソロ ソロ モブ! ペア Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20

21.

まとめ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

22.

まとめ ● DDDのモブワークでは、いかにドメインに 集中するかが鍵。 ● ドメインに集中できるように、アーキテク チャや進め方を工夫する。 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22

23.

ご清聴 ありがとうございました Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 23