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
330
meetup_201910.pdf
tony1224
0
180
potatotips_201906.pdf
tony1224
0
96
potatotips_201905.pdf
tony1224
1
500
andfactory_201903.pdf
tony1224
0
1.3k
WWDC18 cherry-pick Xcode 10 beta
tony1224
0
340
Other Decks in Programming
See All in Programming
初めての模倣学習とVLA
natsutan
0
190
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
引き算の組織 ― アウトカムとAIに全振りするために辞めたこと ― / Organization by Subtraction
hirokiyamamoto14
PRO
0
280
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.6k
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
200
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
200
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.5k
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
ソフトウェアラスタライザ
fadis
1
500
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
140
Featured
See All Featured
Optimizing for Happiness
mojombo
378
71k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Google's AI Overviews - The New Search
badams
0
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
RailsConf 2023
tenderlove
30
1.5k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
900
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Discover your Explorer Soul
emna__ayadi
2
1.3k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
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!