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
320
meetup_201910.pdf
tony1224
0
180
potatotips_201906.pdf
tony1224
0
95
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
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
130
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
440
React本体のコードリーディング
high_g_engineer
1
130
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
240
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
200
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
0
440
数百円から始めるRuby電子工作
tarosay
0
120
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
170
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
470
Featured
See All Featured
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
30 Presentation Tips
portentint
PRO
1
360
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
670
My Coaching Mixtape
mlcsv
0
190
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
The untapped power of vector embeddings
frankvandijk
2
1.8k
So, you think you're a good person
axbom
PRO
2
2.1k
Building the Perfect Custom Keyboard
takai
2
830
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Site-Speed That Sticks
csswizardry
13
1.4k
Mind Mapping
helmedeiros
PRO
1
290
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
400
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!