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
Dividing Model into layers and implementing Uni...
Search
kamui_project
February 26, 2019
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dividing Model into layers and implementing Unit Test
kamui_project
February 26, 2019
More Decks by kamui_project
See All by kamui_project
String Catalog
tony1224
1
2.4k
DI整備でneedleを使った話
tony1224
0
310
meetup_201910.pdf
tony1224
0
180
potatotips_201906.pdf
tony1224
0
94
potatotips_201905.pdf
tony1224
1
490
andfactory_201903.pdf
tony1224
0
1.3k
WWDC18 cherry-pick Xcode 10 beta
tony1224
0
340
Other Decks in Programming
See All in Programming
GitHub Copilot CLIのいいところ
htkym
2
1.3k
さぁV100、メモリをお食べ・・・
nilpe
0
130
Oxcを導入して開発体験が向上した話
yug1224
4
290
OSもどきOS
arkw
0
460
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.7k
Claspは野良GASの夢をみるか
takter00
0
170
今さら聞けないCancellationToken
htkym
0
220
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
170
JavaDoc 再入門
nagise
0
290
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
240
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
130
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Ace a Technical Interview
jacobian
281
24k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
160
Between Models and Reality
mayunak
4
330
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
GitHub's CSS Performance
jonrohan
1033
470k
How STYLIGHT went responsive
nonsquared
100
6.2k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
600
Become a Pro
speakerdeck
PRO
31
6k
Transcript
ModelΛ LayerͰ͚ͯ Unit Testͷ؍Λ໌֬͢Δ potatotips #59
About me • Name: ͔Ή͍ (Twitter: @kamui_project) • Company: DMM.com
• App: MENUS • Community: ϖϯΪϯଜ
None
None
I will tell you …
Unit Tests for iOS
None
None
We implemented unit testing like this …
HogeTests Hoge
Architecture • GUI Architecture -> MVVM • System Architecture ->
Layered Architecture
Testability! RxSwift! DDD! CI/CD! Availability! Readability! Maintainability! Scalability! XcodeGen! All
Swift!
EoT(Ease of Testing)! RxSwift! DDD! CI/CD! Availability! Readability! Maintainability! Scalability!
XcodeGen! All Swift!
Layered Architecture IUUQTMJUUMFIBOETIBUFOBCMPHDPNFOUSZEEEBSDIJUFDUVSF Ҿ༻৽ଔʹΘΔυϝΠϯۦಈઃܭͷΞʔΩςΫνϟઆ໌<%%%>
Layer • Presentation: ViewModel • Domain: Service • UseCase: UseCase
• Infrastructure: Repository
Layer • Presentation: ViewModel • Domain: Service • UseCase: UseCase
• Infrastructure: Repository Tests Tests Tests Tests
Code Example - User Information -
UserViewModel ը໘ϩʔυ࣌ʹ6TFSใΛऔಘ͠ը໘ʹ6TSFใΛ͢ GVODVTFS8JUI7JFX8JMM"QQFBS \ JOQVUT WJFX8JMM"QQFBSBT0CTFSWBCMF TVCTDSJCF PO/FYU\<XFBLTFMG> JO TFMG
EFQFOEFODJFTHFU6TFS6TF$BTFFYFDVUF NBQ $POWFSUFSTIBSFEDPOWFSU5P6TFS #JOEJOH%BUB TVCTDSJCF PO4VDDFTT\<XFBLTFMG> VTFS#JOEJOH%BUB JO TFMG VTFS3FMBZBDDFQU VTFS#JOEJOH%BUB ^ EJTQPTFE CZTFMG EJTQPTF#BH ^ EJTQPTFE CZEJTQPTF#BH ^
දࣔʹ͓͚Δؔ৺ࣄ Presentation:
UserViewModelTests GVODUFTUը໘ϩʔυ࣌ʹ6TFSใΛऔಘ͠ը໘ʹ6TSFใΛ͢͜ͱ \ MFUVTFS6TFS)FMQFSTIBSFEVTFS $VDLPPͰελϒੜ TUVC NPDL(FU6TFS6TF$BTF \ QSPYZ
JO XIFO QSPYZFYFDVUF UIFO3FUVSO KVTU VTFS ^ EP\ MFUVTFS#JOEJOH%BUBTVCKFDUPVUQVUVTFS#JOEJOH%BUBBT0CTFSWBCMF TIBSF SFQMBZ TDPQFXIJMF$POOFDUFE VTFS#JOEJOH%BUBTVCTDSJCF EJTQPTFE CZEJTQPTF#BH ը໘දࣔ WJFX8JMM"QQFBS3FMBZBDDFQU USVF MFUFWFOUUSZVTFS#JOEJOH%BUBUBLF UP#MPDLJOH UP"SSBZ 9$5"TTFSU&RVBM FWFOUDPVOU ^DBUDI\ 9$5'BUJM ^ ^
UserUseCase 6TFSใऔಘॲཧΛ࣮ߦ GVODFYFDVUF 4JOHMF6TFS\ SFUVSOVTFS3FQPTJUPSZpOE ^
PresentationͷͨΊͷDomainૢ࡞ʹ͓͚Δؔ৺ࣄ UseCase: ※(Evansຊ)ͰApplicationͱհ͞Ε͍ͯ·͕͢ɺDomainObjectͷΛૢ࡞͠ͳ͍ɾӬଓԽͷӨڹ ͷ͋Δૢ࡞Λ͠ͳ͍ͱ͍͏Ͱతࣅ͍ͯ·͢
UserUseCaseTests GVODUFTU6TFSใऔಘॲཧΛ࣮ߦ͢Δ͜ͱ \ MFUVTFS6TFS)FMQFSTIBSFEVTFS $VDLPPͰελϒੜ TUVC NPDL6TFS3FQPTJUPSZ \ QSPYZ
JO XIFO QSPYZpOE UIFO3FUVSO KVTU VTFS ^ MFUFYFDVUFTVCKFDUFYFDVUF BT0CTFSWBCMF TIBSF SFQMBZ TDPQFXIJMF$POOFDUFE FYFDVUFTVCTDSJCF EJTQPTFE CZEJTQPTF#BH EP\ MFUVTFSUSZFYFDVUFUBLF UP#MPDLJOH MBTU 9$5"TTFSU/PU/JM VTFS 9$5"TTFSU&RVBM VTFSJE 9$5"TTFSU&RVBM VTFSOBNF l͔Ή͍z 9$5"TTFSU&RVBM VTFSBHF ^DBUDI\ 9$5'BJM ^ ^
UserRepository 6TFSใΛ6TFS"QJʹ͍߹Θͤͯऔಘ͢Δ GVODpOE 4JOHMF6TFS\ SFUVSO6TFS"QJ(FU6TFS SYTFOE NBQ \SFTQPOTF6TFSJO SFUVSO6TFS
JE6TFS*E JESFTQPOTFJE OBNFSFQPOTFOBNF BHFSFTQPOTFBHF ^ ^
ӬଓԽʹ͓͚Δؔ৺ࣄ Infrastructure:
UserRepositoryTests PWFSSJEFGVODTFU6Q \ .PDLJOHKBZͰελϒੜ TUVC IUUQ HFU VSJ4USJOHlVTFSTl KTPO <lJEz
dׂѪd> ^ GVODUFTU6TFSใΛ6TFS"QJʹ͍߹Θͤͯऔಘ͢Δ͜ͱ \ MFUVTFS6TFS)FMQFSTIBSFEVTFS MFUpOETVCKFDUpOE BT0CTFSWBCMF TIBSF SFQMBZ TDPQFXIJMF$POOFDUFE pOETVCTDSJCF EJTQPTFE CZEJTQPTF#BH MFUFYQFYQFDUBUJPO EFTDSJQUJPOlz EP\ MFUVTFSUSZpOEUBLF UP#MPDLJOH TJOHMF 9$5"TTFSU/PU/JM VTFS 9$5"TTFSU&RVBM VTFSJE ddׂѪdd ^DBUDI\ 9$5'BUJM ^ ^
Conclusion • Before: Point of view? • After: ɹArchitcture-pattern ->
Modeling -> Carify Responsibility ->
In the end • We’re Hiring!!! -> Especially, Developer! •
Firstly… Let’s have lunch together!
Thank you!