Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オブジェクトで会話できてる?with DDD
Search
uzzu
April 30, 2014
Programming
1
290
オブジェクトで会話できてる?with DDD
I talked in "Object design rough talks"
http://www.zusaar.com/event/5037004
uzzu
April 30, 2014
Tweet
Share
More Decks by uzzu
See All by uzzu
Context Receiversに思いを馳せる / Context Receivers
uzzu
0
730
StoreKitのこれまでとこれから / StoreKit 2 from 1
uzzu
5
20k
Autofill Framework
uzzu
0
140
アプリ内課金の最新事情 クライアントサイド編 / In-app Purchase in Cookpad 2019
uzzu
3
4.6k
Billing Client 2.0 acknowledgement
uzzu
0
17k
Promoting IAP対応から学ぶ外部アプリ内課金実装 / Promoting IAP and others
uzzu
2
1.6k
ブログ作り直した / My blog @ Othlo Tech
uzzu
0
200
新規アプリ開発を支えるユーザ・決済基盤
uzzu
2
2.9k
kotlin-mpp-library-tips
uzzu
1
6.4k
Other Decks in Programming
See All in Programming
猫の手も借りたい!ので AIエージェント猫を作って社内に放した話 Claude Code × Container Lambda の Slack Bot "DevNeko"
naramomi7
0
260
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
560
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
130
Claude Codeログ基盤の構築
giginet
PRO
4
1.7k
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
170
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
180
How to stabilize UI tests using XCTest
akkeylab
0
110
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
15
2.9k
ふつうのRubyist、ちいさなデバイス、大きな一年 / Ordinary Rubyists, Tiny Devices, Big Year
chobishiba
1
420
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
120
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
800
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
660
Everyday Curiosity
cassininazir
0
160
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
670
AI: The stuff that nobody shows you
jnunemaker
PRO
3
370
Google's AI Overviews - The New Search
badams
0
930
RailsConf 2023
tenderlove
30
1.4k
Navigating Team Friction
lara
192
16k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
300
Un-Boring Meetings
codingconduct
0
220
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
67
37k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Transcript
オブジェクトで 会話できてる? @uzzu
Objectives 会話によって ドメインモデルを育てる ドメイン層を 全力で守る
Topics ユビキタス言語 Ubiquitous Language from DDD 境界コンテキスト Bounded Context from
DDD 隔離されたコア Segrated Core from DDD 他ちょいちょい
Do It モデル
Do It モデル
「モデル」って何?
「モデル」って何?
モデルの解釈はコンテキスト次第
コンテキスト境界を意識する
同じ単語でもコンテキスト境界を超えると不適切に なる事が多々 ユビキタス言語の方言 オブジェクトの概念的寿命 (≠ライフサイクル) を意識する 会話によってオブジェクトを育てる
Objectives 会話によって ドメインモデルを育てる ドメイン層を 全力で守る
オブジェクトで会話をする with DDD なんかモンスターとか連れて旅にでるゲームにおけるモンスターの管理ドメイン
オブジェクトで会話をする with DDD なんかモンスターとか連れて旅にでるゲームにおけるモンスターの管理ドメイン MonsterはEntityだよねー。HPはValueObjectだよねー。みたいな会話
オブジェクトで会話をする with DDD Monsterというドメインモデルを実装していく class Monster : ActiveRecord.Base {}
オブジェクトで会話をする with DDD Monsterというドメインモデルを実装していく class Monster : ActiveRecord.Base {}
オブジェクトで会話をする with DDD Monsterというドメインモデルを実装していく ちょっとまってください ActiveRecord.Base ってなんですか。さっきまで MonsterはMonsterIdを識別 子(Identity)とするEntityだって話してたじゃないですか。なのに今の Monsterの実装に反映されて
いないというのはどういうことなんでしょう。その上 ActiveRecordというPoEAAという書籍に記載されている データベースアクセスをカプセル化する設計パターンのベースクラスなのか知りませんけどそれは Monster オブジェクトの責務ではないですよね。 ◦◦言語ではクラスはオブジェク トだしActiveRecord.Base では提供されるAPIについてクラスオブ ジェクトのメソッドとして実装されているし単一責務だとかオブジェクトで 会話できてるとか言えるかもしれませんけど、それが伝わるのはあくま でも◦◦言語の中の話であるし、何よりも解決すべきシナリオとは直接 関係のない「オブジェクトのライフサイクル」に関する実装がドメインモ デルの実装に混ざってしまうというのは ISO9126ソフトウェア品質特性 モデルにおける使用性 (理解性、習得性)及び移植性を低下させてし まうので、よくないんじゃないですか。たとえば Monsterのライフサイク ルがDBではないものになったらそれに合わせて Monsterオブジェクト を修正しないといけないですよねシナリオは何も変わっていないという のに。さっきまでの会話はなんだったんですか
オブジェクトで会話をする with DDD Monsterというドメインモデルを実装していく class Monster : ActiveRecord.Base {} class
Monster : Entity<MonsterId> {} class MonsterId : Identity {}
オブジェクトで会話をする with DDD Monsterというドメインモデルを実装していく class Monster : ActiveRecord.Base {} class
Monster : Entity<MonsterId> {} class MonsterId : Identity {}
全力でドメイン層を守る 解決すべきドメインのシナリオ以外の責務を ドメインモデルに与えてはいけない。 SRP違反。会話ができなくなる。
解決すべきドメインのシナリオ以外? ・ライフサイクル DB,◦◦キャッシュ, Remote, BuildInAsset, Application, Scene, Memory, DeviceStorage ・コンテキスト境界外
None
コアドメイン
Objectives 会話によって ドメインモデルを育てる ドメイン層を 全力で守る
None
オブジェクトで 会話できてる? ~終~