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
120
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
100
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
71
あの日のHotReloadはなぜ動かなかったのか? 〜OSセキュリティ(W^X)とJITコンパイラの攻防〜
chigichan24
3
1.4k
「 動く」サンプルでスムーズなコミュニケーションを
chigichan24
1
1.4k
Claude CodeでサクサクTestコードを移行しよう
chigichan24
2
1.5k
Live Update notificationのつかいどころ
chigichan24
0
380
不具合調査とTest
chigichan24
1
470
Flutterと難読化
chigichan24
0
5.9k
Building Android and looking into the Android System
chigichan24
2
4.3k
Other Decks in Programming
See All in Programming
T3DD26: From RAGs to Riches
martinhelmich
0
130
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
2
880
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
770
業務時間外もAIに働いてもらう話
colorful12
3
9.5k
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
140
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
360
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
270
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
280
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
150
源内ハンズオン概要編
hideg
0
230
AIの中の人になってみる
htkym
0
150
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
How to build a perfect <img>
jonoalderson
1
5.9k
Building AI with AI
inesmontani
PRO
1
1.2k
4 Signs Your Business is Dying
shpigford
187
23k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
How STYLIGHT went responsive
nonsquared
100
6.3k
The Curse of the Amulet
leimatthew05
2
14k
Design in an AI World
tapps
1
290
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
910
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