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.3k
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.5k
DI整備でneedleを使った話
tony1224
0
340
meetup_201910.pdf
tony1224
0
180
potatotips_201906.pdf
tony1224
0
97
potatotips_201905.pdf
tony1224
1
500
andfactory_201903.pdf
tony1224
0
1.3k
WWDC18 cherry-pick Xcode 10 beta
tony1224
0
350
Other Decks in Programming
See All in Programming
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
350
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
670
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.7k
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
330
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
200
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
160
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
120
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
300
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Curse of the Amulet
leimatthew05
2
14k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The Curious Case for Waylosing
cassininazir
1
490
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
We Have a Design System, Now What?
morganepeng
55
8.3k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
190
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
190
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
GitHub's CSS Performance
jonrohan
1033
470k
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!