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
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
Search
Akira Suenami
July 25, 2025
Programming
9
2k
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
Akira Suenami
July 25, 2025
Tweet
Share
More Decks by Akira Suenami
See All by Akira Suenami
オブジェクト指向考古学 〜人類は再びDCIの夢を見るか〜
a_suenami
5
3.1k
トランザクションスクリプトはどこから来たのか トランザクションスクリプトは何者か トランザクションスクリプトはどこへ行くのか #sekkeinight
a_suenami
14
6.6k
値と属性の話
a_suenami
0
250
ドメインモデラーにとって受託開発であることは制約なのか?
a_suenami
1
1.5k
異なるモデリングパラダイムから見るモデリングの勘所 #ooc_2020
a_suenami
2
3.2k
マルチパラダイムモデリング 〜異なるモデリングパラダイムから見るモデリングの勘所〜 #PHPerKaigi
a_suenami
0
3.9k
“ユーザーファースト”の功罪 〜分析と実験によるアーキテクチャ設計〜 #bpstudy
a_suenami
4
1.4k
ドメインモデルのつくり方 #5000dai
a_suenami
16
4.9k
ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon
a_suenami
46
12k
Other Decks in Programming
See All in Programming
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
700
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
220
LLMとPlaywright/reg-suitを活用した jQueryリファクタリングの実際
kinocoboy2
4
640
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
7
1.3k
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
630
スマホで海難事故は防げるか?年間2000件以上の小型船舶の事故に挑むアプリ開発
atsuki_seo
0
120
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
420
AccessorySetupKitで実現するシームレスなペアリング体験 / Seamless pairing with AccessorySetupKit
nekowen
0
200
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
760
ネイティブ製ガントチャートUIを作って学ぶUICollectionViewLayoutの威力
jrsaruo
0
110
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
380
Build your own WebP codec in Swift
kishikawakatsumi
2
830
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
What's in a price? How to price your products and services
michaelherold
246
12k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
Documentation Writing (for coders)
carmenintech
75
5k
Making Projects Easy
brettharned
118
6.4k
A designer walks into a library…
pauljervisheath
208
24k
Agile that works and the tools we love
rasmusluckow
330
21k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Automating Front-end Workflow
addyosmani
1371
200k
Transcript
可変性を制する設計 : 構造と振る舞いから 考える概念モデリングとその実装 2024/07/25 設計ナイト 2025 末並 晃 @a_suenami
自己紹介 • 末並 晃 @a_suenami • 業務システムの設計や開発が好き • データベースが好き •
お仕事でよく使う技術スタック : Rails, React (Next.js), Node.js, etc. • 好きな食べ物 : 焼肉 🍖
インターネット上での立場
インターネット上での立場 焼肉をタカられるという エンターテイメントをインターネットに提供しています。 (焼肉を奢るとは言ってない)
今日話すこと
キーワード : 可変性
参考書籍
可変性とは
可変性とは この場合、引数 n を「可変点」と呼ぶ。
可変性のバインディング • 可変点に対して具体的な値をいつ注入するか • バインディングタイム(バインディング時期)と言う。
バインディングタイムの種類 マルチパラダイムデザイン 一般的なWebアプリケーション 手法 ソースコード時 VCSコミット時 ベタ書き、設定ファイル コンパイル時 ビルド時 ビルドオプション
リンク時 (コンテナ)起動時 環境変数 実行時 実行時 永続化データストア
バインディングサイト • サイト = 「いつ」「どこで」「誰が」 • ジェネレーティブプログラミングで出てくる概念 • 「いつ」だけでなく「どこで」「誰が」をバインディング制御に用い る
2-sided platform / マルチテナントシステム
具体例: 料金設定 • 料金計算の要望が多かったの で!
想定環境 • レンタル事業者とそのユーザー向けシステム • 料金は商品ごとに設定できる ◦ 厳密にはSKUごとだが簡単のためにここでは商品と 呼ぶ • 簡単のため、レンタルする期間によって料金が変わると
仮定する ◦ 割引、クーポン利用、ダイナミックプライシングなどは ないものとする
料金設定の構造 • 階段料金制( Tiered Pricing )で設定できるものとする。
料金設定の構造
料金の計算(振る舞い)
商品のデータ構造 管理画面ユーザとカスタマーで期待する構造が異なる。
実装パターン : 関数の部分適用 実装としては関数の部分適用でバインディングサイトを分けること ができる。
実装パターン : Strategy パターン カスタマー側(料金計算)はインターフェースにのみ依存となり、料 金設定の具体的構造へは非依存となる。
まとめ • ソフトウェアシステムがユーザーの活動や事業活を支える基盤 的な役割を担うようになるにつれて、多くの可変点を持つように なる。 • 同様に、そのシステムを利用するアクターも多様化する。 • 可変性そのものの分析・設計ももちろん重要であるが、それを バインディングするタイミングとアクターの分析も同様に重要で
ある。 • おまけ: キャッシュ戦略も考えやすい。
一句 誰がいつ バインドするのか 考えよう