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

「モデル」の二面性と設計を考える / dual nature of "model"

「モデル」の二面性と設計を考える / dual nature of "model"

philomagi

June 02, 2020
Tweet

More Decks by philomagi

Other Decks in Programming

Transcript

  1. 発表者 @Philomagi • WEB系プログラマ • 自称フロントエンド寄り ◦ 最近のマイブームは SelfとSmalltalk ◦

    vanila jsも久しぶりにちょっと触りたい • 設計の話とかが好きです ◦ DDDとかクリーンアーキテクチャとか 2
  2. 「what is」と「how do」の不可分性 23 • 「what is」を変える = 記号や線が変わる ◦

    図全体が変わるので、「how do」も変わる • 「how do」を変える = 図全体の構造が変わる ◦ 記号や線が変わる(名前、記号・線の種類、線の向き、 線の位置、etc...)ので、「what is」も変わる
  3. (再掲)「what is」と「how do」の不可分性 29 • 「what is」を変える = 記号や線が変わる ◦

    図全体が変わるので、「how do」も変わる • 「how do」を変える = 図全体の構造が変わる ◦ 記号や線が変わる(名前、記号・線の種類、線の向き、 線の位置、etc...)ので、「what is」も変わる
  4. 「what is」と「how do」の不可分性 30 • 「どのように解決するか(how do)」によって、必要 な知識が「何であるか(what is)」は変わる •

    必要な知識が「何であるか(what is)」が変わるな ら、「どのように解決するか(how do)」も変わる
  5. アプリケーションモデルとドメインモデル間のwhat is / how do 38 ドメインモデル • how do

    ◦ ビジネスをどのように実現するか • what is ◦ ビジネス知識 ▪ 用語 ▪ ルール ▪ 制約 etc...
  6. アプリケーションモデルとドメインモデル間のwhat is / how do 39 ドメインモデル アプリケーションモデル • how

    do ◦ ビジネスをどのように実現するか • what is ◦ ビジネス知識 ▪ 用語 ▪ ルール ▪ 制約 etc...
  7. アプリケーションモデルとドメインモデル間のwhat is / how do 40 ドメインモデル • how do

    ◦ ビジネスをどのように実現するか • what is ◦ ビジネス知識 ▪ 用語 ▪ ルール ▪ 制約 etc... アプリケーションモデル • how do ◦ 機能(ユースケース)をどのように実現 するか • what is ◦ 機能としての入力/出力 ◦ ドメイン知識
  8. アプリケーションモデルとドメインモデル間のwhat is / how do 41 ドメインモデル アプリケーションモデル • how

    do ◦ ビジネスをどのように実現するか • what is ◦ ビジネス知識 ▪ 用語 ▪ ルール ▪ 制約 etc... • how do ◦ 機能(ユースケース)をどのように実現 するか • what is ◦ 機能としての入力/出力 ◦ ドメイン知識
  9. アプリケーションモデルとドメインモデル間のwhat is / how do 42 ドメインモデル アプリケーションモデル • アプリケーションモデルにとって、

    ドメインモデ ルは what is の一つ • ドメインモデルは、アプリケーションそのものは 実現しない • ドメインモデルは、アプリケーションを実現する ための語彙を提供する • how do ◦ ビジネスをどのように実現するか • what is ◦ ビジネス知識 ▪ 用語 ▪ ルール ▪ 制約 etc... • how do ◦ 機能(ユースケース)をどのように実現 するか • what is ◦ 機能としての入力/出力 ◦ ドメイン知識
  10. ドメインモデルとアプリケーションモデル 44 • アプリケーションモデルにとって、ドメインモデルは what is の一つ • ドメインモデルは、アプリケーションそのものは実現しない •

    ドメインモデルは、アプリケーションを実現するための語彙を提供する ↓ 「ドメインモデルからの知識の流出(=貧血症)」のみならず、「ドメインモデルの過剰 な肥大化(=高血圧症?)」の「臭い」を感じるための指標にならないか?
  11. ドメインモデルとアプリケーションモデル 45 • アプリケーションモデルにとって、ドメインモデルは what is の一つ • ドメインモデルは、アプリケーションそのものは実現しない •

    ドメインモデルは、アプリケーションを実現するための語彙を提供する ↓ 「ドメインモデルからの知識の流出(=貧血症)」のみならず、「ドメインモデルの過剰 な肥大化(=高血圧症?)」の「臭い」を感じるための指標にならないか?
  12. ドメインモデルとアプリケーションモデル 46 • アプリケーションモデルにとって、ドメインモデルは what is の一つ • ドメインモデルは、アプリケーションそのものは実現しない •

    ドメインモデルは、アプリケーションを実現するための語彙を提供する ↓ 「ドメインモデルからの知識の流出(=貧血症)」のみならず、「ドメインモデルの過剰 な肥大化(=高血圧症?)」の「臭い」を感じるための指標にならないか?
  13. 「Xはドメインか、アプリケーションか?」 「Xはドメインか、アプリケーションか?」を 考える問い立ての道具としての what is/how do • そのXはドメインか?=ドメインモデルの what is

    か? ◦ Xは、ドメインの知識(用語・ルール・制約)を表現したものか? ◦ それを組み込んだドメインモデル全体 = how do は、「どのようにビジネスを実現するか」の記述 として成立しているか? 48
  14. 「Xはドメインか、アプリケーションか?」 「Xはドメインか、アプリケーションか?」を 考える問い立ての道具としての what is/how do • そのXはドメインか?=ドメインモデルの what is

    か? ◦ Xは、ドメインの知識(用語・ルール・制約)を表現したものか? ◦ それを組み込んだドメインモデル全体 = how do は、「どのようにビジネスを実現するか」の記述 として成立しているか? • そのXはアプリケーションか?=アプリケーションモデルの what is か? ◦ Xは、アプリケーションの知識(ユースケース、入力 /出力)を表現したものか? ◦ それを組み込んだアプリケーションモデル全体 = how doは、「どのように機能を実現するか」の 記述として成立しているか? 49
  15. 「Xはドメインか、アプリケーションか?」 「Xはドメインか、アプリケーションか?」を 考える問い立ての道具としての what is/how do • そのXはドメインか?=ドメインモデルの what is

    か? ◦ Xは、ドメインの知識(用語・ルール・制約)を表現したものか? ◦ それを組み込んだドメインモデル全体 = how do は、「どのようにビジネスを実現するか」の記述 として成立しているか? • そのXはアプリケーションか?=アプリケーションモデルの what is か? ◦ Xは、アプリケーションの知識(ユースケース、入力 /出力)を表現したものか? ◦ それを組み込んだアプリケーションモデル全体 = how doは、「どのように機能を実現するか」の 記述として成立しているか? 50
  16. 「Xはドメインか、アプリケーションか?」 「Xはドメインか、アプリケーションか?」を 考える問い立ての道具としての what is/how do • そのXはドメインか?=ドメインモデルの what is

    か? ◦ Xは、ドメインの知識(用語・ルール・制約)を表現したものか? ◦ それを組み込んだドメインモデル全体 = how do は、「どのようにビジネスを実現するか」の記述 として成立しているか ? • そのXはアプリケーションか?=アプリケーションモデルの what is か? ◦ Xは、アプリケーションの知識(ユースケース、入力 /出力)を表現したものか? ◦ それを組み込んだアプリケーションモデル全体 = how doは、「どのように機能を実現するか」の 記述として成立しているか ? 51
  17. 「Xはドメインか、アプリケーションか?」 「Xはドメインか、アプリケーションか?」を 考える問い立ての道具としての what is/how do • そのXはドメインか?=ドメインモデルの what is

    か? ◦ Xは、ドメインの知識(用語・ルール・制約)を表現したものか? ◦ それを組み込んだドメインモデル全体 = how do は、「どのようにビジネスを実現するか」の記述 として成立しているか? • そのXはアプリケーションか?=アプリケーションモデルの what is か? ◦ Xは、アプリケーションの知識(ユースケース、入力 /出力)を表現したものか? ◦ それを組み込んだアプリケーションモデル全体 = how doは、「どのように機能を実現するか」の 記述として成立しているか? 52
  18. 変わったこと・変わらなかったこと • 変わったこと ◦ ユースケースを元に、それが実現するために必要な知識・ルール・ 制約(=ドメインモデルのwhat is)を探し、定義するようになった ◦ 個別の知識(what is)だけでなく、全体の形(how

    do)と照らして判 断することが多くなった • 変わらなかったこと ◦ 整理・分割の基本的な方法 ◦ SOLID、抽象度の統一、DRY、etc… と、昔から知られている原則が やはり活躍する 53
  19. メモ 「抽象度を揃える」=パッケージ内部を全て、同じ観点で意味的であり、同じ観点で非 意味的にする • ex. ドメイン層内部は、全てドメイン知識の表現という点で意味的であり、ユース ケースの実現という観点で非意味的 • ex. ユースケース層内部は、全てユースケースの実現という観点で意味的であ

    り、実現結果の表現という観点で非意味的 • ex. プレゼンテーション層は、全て実現結果の表現という観点で意味的であり、 実現結果を具体的に形にする(ブラウザ、APIクライアント)方法という点で非意 味的 57