Slide 1

Slide 1 text

Designer meets Domain-Driven-Design Designer meets Domain-Driven-Design Designer meets Domain-Driven-Design σ β Π φ ʔ ͕ υ ϝ Π ϯ Ϟ σ ϧ ۦ ಈ ։ ൃ Λ ମ ݧ ͯ͠ ಘ ͨ ஌ ݟ T S U Y O S H I H I G U C H I

Slide 2

Slide 2 text

P R O F I L E 樋 口 剛 T S U Y O S H I H I G U C H I S e r v i c e D e s i g n e r & U I D e v e l o p e r ϑϦʔϥϯεͰελʔτΞοϓ΍৽͍͠ϓϩμΫτͷ αʔϏεσβΠϯͱ։ൃɾ࣮૷·Ͱߦ͍ͬͯ·͢ɻ @tyshgc

Slide 3

Slide 3 text

G R O U P Design For User ͜ͷษڧձ͸ɺαʔϏεσβΠϯʹؔΘΔશͯͷਓୡ ͱϢʔβʔͷͨΊʹΑΓྑ͍αʔϏεΛఏڙ͢ΔͨΊ ͷφϨοδڞ༗ͷ৔ॴͱͯ͠͸͡Ί·ͨ͠ɻ

Slide 4

Slide 4 text

Domain-Driven-Designとは何か 実例で見てみる DDDを経たデザインフローの変化 OOUXやコンポーネント指向へ…

Slide 5

Slide 5 text

Domain-Driven-Designとは何?

Slide 6

Slide 6 text

Domain-Driven-Designを 体験して感じたコト

Slide 7

Slide 7 text

ドメインモデリングはエンジニア発の ユーザー中心設計だ! 戦略的ドメインモデル駆動開発は サービスデザインと同じだ!

Slide 8

Slide 8 text

自分もユースケースとユビキタス言語 を探すようになっていた!

Slide 9

Slide 9 text

しかし… Domain-Driven-Design も 銀の弾丸 ではない ツールやフレームワークを知るのではなく、解決したい本質の部分を学ぶ

Slide 10

Slide 10 text

Domain-Driven-Designを 採用するエンジニアやチームが何を得ようと しているのかが重要

Slide 11

Slide 11 text

では、Domain-Driven-Designを 紐解いてみましょう

Slide 12

Slide 12 text

Domain Driven Design エリック・エヴァンス氏が提唱する ソフトウェアの設計手法 ドメイン駆動設計・開発

Slide 13

Slide 13 text

ιϑτ΢ΣΞઃܭͱ͸ɺ໰୊ղܾͱܭըͷ޻ఔ 移り変わる 概念やステークホルダーの関心事がある

Slide 14

Slide 14 text

ソフトウェアはヒトが扱うもの ソフトウェアはサービスの一部

Slide 15

Slide 15 text

ソフトウェアはヒトが扱うもの ソフトウェアはサービスの一部 ιϑτ΢ΣΞ͕ղܾ͢΂͖໰୊͸ɺ αʔϏεʹؔ܎͢Δ֓೦Λ੔ཧ͢Δաఔ͔ΒಡΈऔΕΔ

Slide 16

Slide 16 text

֓೦ ෺ࣄʹ͍ͭͯந৅తʹ೺Ѳ͢Δ͞· ϝϯλϧϞσϧ

Slide 17

Slide 17 text

αʔϏεͷར༻ऀ αʔϏεͷఏڙऀ ར༻ऀͷղܾ͍ͨ͠໰୊΍ χʔζͷͨΊʹۀ຿Λ ͓͜ͳ͏ ղܾ͍ͨ͠໰୊΍χʔζ͸ ιϑτ΢ΣΞͷத͚ͩʹ ͋ΔΘ͚Ͱ͸ͳ͍ αʔϏεͷεςʔΫϗϧμʔ

Slide 18

Slide 18 text

ιϑτ΢ΣΞ͕ղܾ͢΂͖໰୊ αʔϏεͷར༻ऀ αʔϏεͷఏڙऀ εςʔΫϗϧμʔͷ ϝϯλϧϞσϧ͔Β໰୊ͷ֩৺Λநग़Ͱ͖Δ

Slide 19

Slide 19 text

サービスデザインにおける フロントヤードとバックヤードなどの視点と同じだ

Slide 20

Slide 20 text

ؔ܎͢Δώτͷ໰୊ղܾͱͣͬͱ෇͖߹͏ͨΊʹɺ ֓೦ϞσϧʹԊͬͯΦϒδΣΫτࢦ޲Ͱ ։ൃʢઃܭɾ࣮૷ʣΛਐΊΔ Domain Driven Design

Slide 21

Slide 21 text

なぜ、Domain-Driven-Design? DDDへの変遷

Slide 22

Slide 22 text

ιϑτ΢ΣΞ։ൃ͸ৗʹมߋͱεϐʔυͱͷઓ͍

Slide 23

Slide 23 text

ઃܭͷͳ͍ঢ়ଶͰͷ։ൃ͢ΔͱͲ͏ͳΔ͔ʁ

Slide 24

Slide 24 text

มߋʹΑΔӨڹൣғ͕޿͘ͳ͍͖ͬͯ อक͕೉͘͠ͳΔ ࣅͨಉ͡ػೳͷίʔυ͕൙ཞ͍ͯ͠Δ UIͱίΞʹͳΔίʔυ͕ࠞࡏɺUIมߋͷ౓ʹӨڹΛड͚Δ = SmartUIʢརޱͳUI / ը໘ۦಈʣ σʔλϕʔε΁ͷϦΫΤετ΍มߋͷίʔυ͕఺ࡏ͍ͯ͠Δ

Slide 25

Slide 25 text

࢓༷υΩϡϝϯτ͸ ௥͍͔ͭͳ͍ Өڹൣғ͕ଟͯ͘ ࠞཚ͕ى͜Δ

Slide 26

Slide 26 text

ソフトウェア開発はサービスの成長スピードに 合わせて柔軟に寄り添い続ける必要がある メンタルモデルを基本にした設計に則って、 コードを言語として人がわかるように書こう!

Slide 27

Slide 27 text

どうやってやる? HOW

Slide 28

Slide 28 text

設計を正しく行うために サービスの概念 を正しく知ろう 概念を知るために ユースケース を探そう

Slide 29

Slide 29 text

ユビキタス言語を抽象化し ドメインモデル を抽出しよう ユースケースから ユビキタス言語 を定義しよう

Slide 30

Slide 30 text

ドメインモデルをオブジェクト指向の クラスモデル にしていこう ドメイン層と 技術的処理やUI層など 責務 を分けよう

Slide 31

Slide 31 text

֓೦͕ίʔυͰදݱ͞Εɺ໾ׂ͝ͱʹߏ଄Խ͞ΕΔ ίʔυΛॻ͘ = Lean & Design

Slide 32

Slide 32 text

ドメイン? ユースケース? ユビキタス言語?責務? WHAT

Slide 33

Slide 33 text

υϝΠϯ サービスのコンテキスト上にある 概念の集まり アカウントという概念はコンテキスト によって異なる。 銀行サービスという文脈で見ると口座 という意味になるが、アプリという文 脈で見るとユーザー情報となる。

Slide 34

Slide 34 text

Ϣʔε έʔε サービスに関係するアクターの それぞれの活動や行動 アクターは利用者、提供者、 システムまで含まれる。 それらのタスクを主語・述語レ ベルで表現できるような単位の もの。

Slide 35

Slide 35 text

ϢϏΩλε ݴޠ ユースケースに存在する 言葉の定義 = メンタルモデル ユビキタス言語とは、 どこでも使える言語のこと。 開発時の普段の会話から コードの命名にも使われる。

Slide 36

Slide 36 text

੹຿ ドメインモデルを様々な実装上の 都合などから隔離すること サービスの概念や振る舞いだけ をコードに置き換えたものが ドメイン層。 それ以外については、役割ごと に別の層に置いていく。

Slide 37

Slide 37 text

実例で見てみる

Slide 38

Slide 38 text

レストランの接客業務 を例にする

Slide 39

Slide 39 text

アクターとユースケースを 探ってみる

Slide 40

Slide 40 text

ΞΫλʔ αʔϏεʹؔ܎ͨ͠׆ಈʹొ৔͢Δਓ෺΍γεςϜ

Slide 41

Slide 41 text

ϨετϥϯαʔϏεͷΞΫλʔ ϨετϥϯͷαʔϏεΛར༻ɻ ϗʔϧελοϑ ઀٬୲౰ͷελοϑɻ઀٬࣌ʹ୺຤Λ࢖༻ ͯ͠஫จΛड෇͚Δɻ ར༻٬ ਥ๪ελοϑ ௐཧ୲౰ͷελοϑɻ POS ൢച࣌఺৘ใ؅ཧγεςϜɻ୺຤͔Β஫จ Λड͚෇͚ɺਥ๪΁प஌ͨ͠Γɺܾࡁͷ؅ ཧΛߦ͏ɻ

Slide 42

Slide 42 text

Ϣʔεέʔε ΞΫλʔͦΕͧΕͷλεΫ ओޠʢΞΫλʔʣ+ ड़ޠʢಈ࡞΍ঢ়ଶʣ ͳΔ΂͘γϯϓϧͳจষʹ͢Δ

Slide 43

Slide 43 text

ϨετϥϯαʔϏεͷϢʔεέʔεʢҰ෦ൈਮʣ ར༻٬͸ɺೖళ͢Δ ϗʔϧελοϑ͸ɺςʔϒϧ΁Ҋ಺͢Δ ར༻٬͸ɺϝχϡʔ͔Β඼໨ΛબͿ ར༻٬͸ɺϗʔϧελοϑΛݺͿ ར༻٬͸ɺر๬ͷ඼໨Λ஫จ͢Δ ϗʔϧελοϑ͸ɺ୺຤ʹ඼໨Λೖྗ͢Δ ୺຤͸ɺ஫จ඼໨ͷࡏݿΛݮΒ͢

Slide 44

Slide 44 text

Ϣʔεέʔε͸ਤʹͯ͠΋ྑ͍ ڞ༗Ͱ͖ͯΘ͔Ε͹ͳΜͰ΋ྑ͍ ސ٬ ϗʔϧελοϑ ୺຤ ඼໨ΛબͿ ඼໨Λ୳͢ ඼໨ΛબͿ ஫จΛ֬ఆ͢Δ ஫จΛ͢Δ γεςϜ ʢ104ʣ

Slide 45

Slide 45 text

ϢϏΩλεݴޠ Ϣʔεέʔεʹଘࡏ͢Δݴ༿ͷఆٛΛ͢Δ ྫʣϨετϥϯͱ͸ɺ஫จͯ͠ҿ৯͢Δ৔ॴͩ

Slide 46

Slide 46 text

Ϣʔεέʔε͔Βݴ༿Λर͍ͬͯ͘ ར༻٬͸ɺೖళ͢Δ ϗʔϧελοϑ͸ɺςʔϒϧ΁Ҋ಺͢Δ ར༻٬͸ɺϝχϡʔ͔Β඼໨ΛબͿ ར༻٬͸ɺϗʔϧελοϑΛݺͿ ར༻٬͸ɺر๬ͷ඼໨Λ஫จ͢Δ ϗʔϧελοϑ͸ɺ୺຤ʹ඼໨Λೖྗ͢Δ ୺຤͸ɺ஫จ඼໨ͷࡏݿΛݮΒ͢ テーブル メニュー 品目 注文 在庫

Slide 47

Slide 47 text

ϨετϥϯαʔϏεͷϢϏΩλεݴޠʢҰ෦ൈਮʣ ੮͕ෳ਺͋Δ΋ͷɻςʔϒϧ୯ҐͰ஫จΛ ड͚෇͚Δɻ ϝχϡʔ ඼໨͕ΧςΰϦ͝ͱʹϦετ͞Εͨ΋ͷɻ ςʔϒϧ ඼໨ ྉཧ঎඼΍ҿྉ঎඼ɺηοτɾίʔεͳͲ ͷ঎඼ͷࣄɻ ஫จ ඼໨ΛબΜͰਥ๪ͰௐཧΛ࢝ΊΔ͜ͱɻ ·ͨ୅͕ۚൃੜ͢Δ͜ͱɻ

Slide 48

Slide 48 text

ϢϏΩλεݴޠΛ୳Δ࣌ͷϙΠϯτ ݴ༿ͷఆٛʹҧ࿨ײΛ֮͑ͨΒɺ αʔϏεͷ஌ࣝΛ࣋ͭਓ΍ར༻ऀʹώϠϦϯάΛߦ͏ ҧ࿨ײͷ౓ʹ܁Γฦ͠ߦ͏ ΤϯδχΞ͸ίʔυॻ͖ͳ͕Βҧ࿨ײΛ୳͍ͬͯΔ

Slide 49

Slide 49 text

このコードは、 レストランの "品目" というモデルを 表現している例

Slide 50

Slide 50 text

品目(MenuItem)は… 品目名があり、 それぞれ一意なIDが 決められている。 また、値段が決められており、 数に限りがある(在庫がある)。

Slide 51

Slide 51 text

品目(MenuItem)の 振る舞い(ロジック) 品目には在庫があり、在庫は管 理されるもの。 • 品目の在庫から選ぶ sele ct( ) • 品目の在庫を戻す cancel( )

Slide 52

Slide 52 text

඼໨ɿΦϜϥΠεΛ࡞Δ ඼໨ͱ͍͏ந৅తͳΦϒδΣΫτʢΫϥεΦϒδΣΫτʣΛ ΦϜϥΠεͱ͍͏࣮ମʹ͍ͯ͠Δ

Slide 53

Slide 53 text

これが初歩の段階。 このコードや他のモデルを整理したり、責務を移譲したり とイテレーションをすることで違う表現が見えてくる →リファクタリングへ ֓೦Λ ϞσϦϯά Ϟσϧ Ϋϥεͷਫ਼ࠪ ϢϏΩλεݴޠ ݟ௚͠ ੹຿ͷҠৡ

Slide 54

Slide 54 text

まとめ

Slide 55

Slide 55 text

Domain Driven Designの本質は ユビキタス言語 = メンタルモデル ߏ଄ԽͷΞʔΩςΫνϟ͸։ൃࣄ৘ʹ߹Θ͍ͤͯ͘

Slide 56

Slide 56 text

ϢϏΩλεݴޠΛ࢖͏͜ͱͰΠϝʔδͷᴥᴪΛݮΒ͢ ֓೦ͷந৅ԽʹΑͬͯαʔϏεͷຊ࣭Λڞ༗͢Δ ίʔυΛ࢓༷υΩϡϝϯτʹঢ՚ͤ͞อकੑɾมߋ༰қੑ Λ޲্ͤ͞Δ ϝϯλϧϞσϧ͔ΒυϝΠϯϞσϧΛཧղ͢Δ͜ͱͰ Ϣʔβʔத৺ͷιϑτ΢ΣΞΛ࡞Δ ͕͜͜Ұ൪ॏཁ

Slide 57

Slide 57 text

DDDを経たデザインフローの変化 OOUXやコンポーネント指向…

Slide 58

Slide 58 text

基本的には前から やってた感はあるけど…

Slide 59

Slide 59 text

ϢʔεέʔευϦϒϯʹͳͬͨ ユーザーストーリーよりもスコープが小さいので 主観的にユーザーを想像することが少なくなった。 ユースケース分析すると時間の流れも把握できる。 導線設計やデータフローの参考にするようになった。

Slide 60

Slide 60 text

ユーザーAは 観光地までの アクセス方法を 知りたい ユーザーCは オススメの 飲食店の場所を 調べる ユーザーBは 空港までの 乗り換え案内 を見たい ユーザーは 経路を調べる ユーザーは 施設情報を 調べる 各論 抽象論

Slide 61

Slide 61 text

νʔϜϝϯόʔͰूΊͨϢʔεέʔεΛ࣌ܥྻʹεϓϨουγʔτʹ·ͱΊͨΓ

Slide 62

Slide 62 text

ϝϯλϧϞσϧΛఆٛ͢ΔΑ͏ʹͳͬͨ 画面単位でのデザインを行わず、メンタルモデルに 沿ったコンポーネント設計をするようになった。 モデルからコンポーネントの属性値や振る舞いを見つ ける。またGUI依存するものや表示するだけのものなど 責務ごとに分けてなるべく疎結合を目指す。

Slide 63

Slide 63 text

品目リスト(配列)を渡す メニューコンポーネント 品目コンポーネント 品目名、価格、注文数などを渡す

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

ユースケースや メンタルモデルから コンポーネント を定義する OOUXͱ͍͏ͷΛఏএ͍ͯ͠Δਓ͕͍Δ Object-Oriented-UX http://alistapart.com/article/object-oriented-ux

Slide 68

Slide 68 text

Domain Driven Designからの学び メンタルモデルとユースケースとても大事 σβΠϯ΋֓೦ʹԊΘͤͯɺ࠷ऴతʹ͸ϑϩϯτΤϯυͷίʔυʹ

Slide 69

Slide 69 text

Thank you!