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
Application Design 勉強会 #10
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kazuki Chigita
October 02, 2019
Programming
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Application Design 勉強会 #10
Proxyパターンとの向き合い方
Kazuki Chigita
October 02, 2019
More Decks by Kazuki Chigita
See All by Kazuki Chigita
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
770
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
500
あの日のHotReloadはなぜ動かなかったのか? 〜OSセキュリティ(W^X)とJITコンパイラの攻防〜
chigichan24
3
1.5k
「 動く」サンプルでスムーズなコミュニケーションを
chigichan24
1
1.5k
Claude CodeでサクサクTestコードを移行しよう
chigichan24
2
1.6k
Live Update notificationのつかいどころ
chigichan24
0
410
不具合調査とTest
chigichan24
1
480
Flutterと難読化
chigichan24
0
6k
Building Android and looking into the Android System
chigichan24
2
4.3k
Other Decks in Programming
See All in Programming
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
410
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
430
Webの地図
yosuke_furukawa
PRO
6
5k
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
270
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
390
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
160
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
140
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
SREの越境 / SRE Collaboration
y0hgi
2
290
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.3k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
560
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Product Roadmaps are Hard
iamctodd
55
13k
Navigating Weather and Climate Data
rabernat
0
540
The SEO identity crisis: Don't let AI make you average
varn
0
570
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
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