Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
関数型DDD入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
いなたつ
May 05, 2024
89
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
関数型DDD入門
いなたつ
May 05, 2024
More Decks by いなたつ
See All by いなたつ
KC3 Shinkan Fes 2024 ~ブロックチェーン~
inatatsu
0
78
月刊Nemtus 20231028
inatatsu
0
160
Slide.pdf
inatatsu
0
140
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
430
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
950
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
940
Are puppies a ranking factor?
jonoalderson
2
4.1k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Believing is Seeing
oripsolob
1
240
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
410
Transcript
関数型DDD入門 inatatsu
自己紹介 稲垣 達大 inatatsu 株式会社 OpeningLine アプリケーションエンジニア プロジェクトマネージャー 年 齢
24 大 学 理工学部 情報学科 大学院 エレクトロニクス系工学専攻 ボルダリング・ゲーム 趣 味
会社紹介 創業日:2017年4月12日 会社名の意味:本を開いた1ページ目 創業者:佐々木亮一(現CEO) 事業内容: ・ブロックチェーンを扱う自社製品販売 ・PLM導入支援業務 ・ソフトウェア受託開発業務
ドメイン駆動設計 「ドメイン」知識に基づいた設計手法 P ドメインモデルに落とし込7 P ビジネス要件が維持しやすい
関数型プログラミング 純粋関数を用い状態変化やデータのミューテーションを避けるプログラミング c 入力が同じなら出力は常に同Y c テストと保守が容易になC c バグが減る
代数的データ型 型を組み合わせて作る型で直積型と直和型で構成される 直積型 複数の型を「AND」で組み合わせて表現される 例) 直和型 複数の型を「OR」でいずれかの型として表現される 例)
データモデリング ブログシステムの記事(Post)についてのデータモデリングを考える q タイトt q コンテンA q 著I q 状態
(ドラフト,レビュー済み,レビュー落ち,修正版,公開 etc... q レビュワー (optional q レビューコメント (optional q 公開日時 (optional q 更新日時 (optional)
データモデリング ブログシステムの記事(Post)についてのデータモデリングを考える 記事の公c レビュー済みなら公開可h 記事のレビュ ドラフトもしくは修正版に対して実行可h
リジェクトする場合はレビューコメントを付けU 記事の編集・削B ドラフトの場合自A 公開済みの場合は承認が必要
データモデリング ブログシステムの記事(Post)についてのデータモデリングを考える 記事の公c レビュー済みなら公開可h 記事のレビュ ドラフトもしくは修正版に対して実行可h
リジェクトする場合はレビューコメントを付けU 記事の編集・削B ドラフトの場合自A 公開済みの場合は承認が必要
データモデリング ブログシステムの記事(Post)についてのデータモデリングを考える g レビュー未承認の記事に対して公開日時を設定可W g 未承認の記事を公開してしま g 公開済みの記事に対して状態の変更が可W g 公開済み
-> ドラフトへの巻き戻a g データ不整合の可能性
関数型DDD的データモデリング 記事の状態ごとにデータモデリングを考える DraftPost I タイトE I コンテン@ I 著者 I
記事のレビュー承P I 記事のレビュー却下
関数型DDD的データモデリング 記事の状態ごとにデータモデリングを考える ApprovedPost E タイトT E コンテンH E 著F E
レビュワー E 記事の公開
関数型DDD的データモデリング 記事の状態ごとにデータモデリングを考える PublishedPost H タイトX H コンテンR H 著I H
公開日G H 最終更新日時 H 記事の更新
関数型DDD的データモデリング 記事の状態ごとにデータモデリングを考える RejectedPost F タイトU F コンテンI F 著G F
レビュワB F レビューコメント F 記事の修正
関数型DDD的データモデリング 記事の状態ごとにデータモデリングを考える AppliedReviewChangePost W タイトi W コンテンa W 著X W
レビュワS W レビューコメンd W 新しいタイトi W 新しいコンテンツ W 記事のレビュー承r W 記事のレビュー却下
全域関数と部分関数 全域関数 全ての引数で値が定義されている関数 部分関数 引数によって未定義となる領域が存在する関数
全域関数と部分関数 head関数 : リストの先頭要素を返す関数 (部分関数) 空配列の場合 先頭要素が存在しないためエラー 空配列以外の場合 配列の先頭要素を返す
全域関数と部分関数 head関数 : NotEmptyListの先頭要素を返す関数 (全域関数) 全てのNotEmptyList 先頭要素を返す 1つ以上の要素を持つリストのクラスを作る (NotEmptyList)
全域関数と部分関数 Postの公開操作 Draft状態 -> Error Approve状態 -> 公開日時の設定 Reject状態 ->
Error ApplyReviewChange状態 -> Error Publish状態 -> Error
全域関数と部分関数 Postの公開操作 DraftPost -> 定義無し (実行不可) RejectedPost -> 定義無し (実行不可)
AppliedReviewChangePost -> 定義無し (実行不可) PublishedPost -> 定義無し (実行不可) ApprovedPost -> approvedPost.publish(now)
まとめ 抽象的データ型を活用したデータモデリングを行うことにより といった恩恵が得られる a テストが容易になS a 予期せぬバグが減S a 型レベルで堅牢になる