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
Application Design 勉強会 #10
Search
Kazuki Chigita
October 02, 2019
Programming
0
110
Application Design 勉強会 #10
Proxyパターンとの向き合い方
Kazuki Chigita
October 02, 2019
Tweet
Share
More Decks by Kazuki Chigita
See All by Kazuki Chigita
あの日のHotReloadはなぜ動かなかったのか? 〜OSセキュリティ(W^X)とJITコンパイラの攻防〜
chigichan24
3
770
「 動く」サンプルでスムーズなコミュニケーションを
chigichan24
1
670
Claude CodeでサクサクTestコードを移行しよう
chigichan24
2
880
Live Update notificationのつかいどころ
chigichan24
0
260
不具合調査とTest
chigichan24
1
420
Flutterと難読化
chigichan24
0
5.4k
Building Android and looking into the Android System
chigichan24
2
4.1k
DroidKaigiカンファレンスアプリの歴史からみるアプリアーキテクチャのこれまでとこれから
chigichan24
2
3.4k
継続的に機能開発を進めながら行うマルチモジュール化
chigichan24
2
6.1k
Other Decks in Programming
See All in Programming
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
37k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
150
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
570
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
450
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.2k
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
200
Graviton と Nitro と私
maroon1st
0
160
Deno Tunnel を使ってみた話
kamekyame
0
300
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
4.8k
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
ゲームの物理 剛体編
fadis
0
390
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
0
730
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
1
330
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
120
Google's AI Overviews - The New Search
badams
0
880
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
89
The untapped power of vector embeddings
frankvandijk
1
1.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
420
What's in a price? How to price your products and services
michaelherold
246
13k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
Transcript
APPLICATION DESIGN 勉強会 26章 THU OCT 3RD KAZUKI CHIGITA
課題 ソフトウェアが境界を通過することは難しい.
課題 ソフトウェアが境界を通過することは難しい. ー 意味のあるまとまり間のやりとり ーネットワーク(TCP)やデータベース等の外部との接続
課題 ソフトウェアが境界を通過することは難しい. ー 単一責任の原則(SRP) ー 閉鎖性共通の原則(CCP) ー 依存関係逆転の原則(DIP) ービジネスルールと外的ルールの分離 これらができない傾向にある
例(ショッピングサイトのモデル) 上のモデルに対してItemを追加するような操作をする.
前提 (本当は全部data class なんだけどシンタックスが壊れたのでつけてない)
例(ショッピングサイトのモデル) 上のモデルに対してItemを追加するような操作をする.
例(ショッピングサイトのモデル)
例(ショッピングサイトのモデル)
例(ショッピングサイトのモデル) 強結合
例(ショッピングサイトのモデル) SPR & CCP 違反
例(ショッピングサイトのモデル) SPR & CCP 違反
例(ショッピングサイトのモデル) SPR & CCP 違反 DIP 違反
PROXYパターンの適用
PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. DB操作を担う Productのドメイン に関する処理
PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う
PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う
PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う
PROXYパターンの適用 Interfaceに切り出す.利用者はこれを使う. DBの実体. Productのドメイン に関する処理 DB操作を担う これ無駄では?→
【再掲】例(ショッピングサイトのモデル)
【再掲】例(ショッピングサイトのモデル) 個に対する操作にはあまり意味をなさない.
【再掲】例(ショッピングサイトのモデル) もとの課題でもあった関係性の強結合を解決する.
PROXYパターンの適用2
PROXYパターンの適用2 処理の委譲が行われている
PROXYパターンの適用2 DBに関する固有の処理 ビジネスルールに関する処理 使用者に対するinterface
PROXYパターンまとめ ーProxyパターンはビジネスルールとデータベースの処理を完全に切り離すことができる ーここでは例示としてDBを扱ったが外部のAPIに対しても同じように扱うことができる ーまた,SRP,CCP,DIPの各問題をクリアしている解決策とも言える ProxyはDBとimplの両者に紐付いており,変更の影響を強く受ける 【問題点】
多重継承できる言語なら Stairway to Heaven Patternの適用が可能
多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス
多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス ビジネスルール DB知識
多重継承できる言語なら Stairway to Heaven Patternの適用が可能 ←DBに対する知識を持っている.read(). write()のみの抽象クラス ビジネスルール DB知識 ←適切に分離し,影響を最小限にする
DBと戦う他のアプローチ ーExtension Objectパターン(28章) ーVisitorパターン(28章) ーDecoratorパターン(29章) ーFacdeパターン ー DatabaseFacadeを作成し,ビジネスロジックぽいものと DB知識っぽいものを分離して実装 ー
Façadeとそれに紐づくものが強結合してしまう問題点があるがリファクタしやすい.
参考文献 ロバート・C・マーチン他. アジャイルソフトウェア開発の奥義第二版 オブジェクト指向開発の真髄と匠の技. SBクリエイティブ,2008