Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
MVVMについて.pdf
keisukeYamagishi
November 28, 2021
0
160
MVVMについて.pdf
keisukeYamagishi
November 28, 2021
Tweet
Share
More Decks by keisukeYamagishi
See All by keisukeYamagishi
RxAlert 結構便利だと思います。
keisukeyamagishi
0
15
Chart実装が楽になりました。
keisukeyamagishi
0
170
NabigationControllerとの付き合い方
keisukeyamagishi
0
120
開発効率を考えてみました。xsort
keisukeyamagishi
0
110
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
85
4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
21
1.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
GraphQLの誤解/rethinking-graphql
sonatard
31
6.8k
Why You Should Never Use an ORM
jnunemaker
PRO
47
7.7k
For a Future-Friendly Web
brad_frost
166
7.5k
A Tale of Four Properties
chriscoyier
149
21k
The Brand Is Dead. Long Live the Brand.
mthomps
46
2.7k
Making Projects Easy
brettharned
98
4.4k
Mobile First: as difficult as doing things right
swwweet
213
7.6k
How GitHub (no longer) Works
holman
297
140k
Thoughts on Productivity
jonyablonski
44
2.4k
Transcript
僭越ながら、 MVVM🤔 Input Output について考えてみました。 Shichimitoucarashi keisuke yamagishi
自己紹介 名前: 山岸恵介 フリーランスのiOSエンジニア Github: https://github.com/keisukeYamagishi Twitter: https://twitter.com/jelly_0_o HP: https://shichimitoucarashi.com App:
https://apps.apple.com/jp/app/create-sevens/id1452292881 アプリを作っているので、よければDLしていただけますと幸いです🎉
読みやすく、わかりやすく、管理しやすい コンセプトは
まずは ’Input’これは入力される値を渡すわけです が、工学的🧐 学術的🤔、そして抽象的🤩
わかりづらいと感じます🤓
受信🎉 わかりやすい気がします(主観ですが) なので、 ’Input’は Receive
`receive` で定義したサンプルコード protocol ViewModelReceive: AnyObject { func callApi(_ indexPath: IndexPath)
}
`Output` に関しても、工学的🧐、学術的 🤔、そして抽象的🎉
やっぱりこちらもわかりづらいと感じます😇
なので😇 例えばですが、 画面遷移を伴うものは、 `route` で定義 UIに変化を反映させる場合は、 `ui` で定義。
routeのサンプルコード protocol ViewModelRoute: AnyObject { func detail(_ result: @escaping (Data?,
String, HTTPURLResponse?, Error?) -> Void) func transition(_ callBack: @escaping () -> Void) }
uiのサンプルコード protocol ViewModelUI: AnyObject { func progress(_ handler: @escaping ((Float)
-> Void)) }
ViewController側の実装🦾 viewModel.route.detail { [unowned self] data, str, res, error in
self.detail(data: data, param: str, response: res, error: error) } viewModel.route.transition {[unowned self] in self.detailViewController(isDL: true) } viewModel.ui.progress { percentage in self.progressView.progress = percentage } viewModel.receive.callApi(indexPath)
まとめ この書き方については、「Nuke」の作者の「Alex Grebenyuk」のtweetをみて自分なりに作成してみまし た。 https://github.com/kean https://twitter.com/a_grebenyuk サンプルが下記になります。興味のある方はみていただけますと幸いです。 https://github.com/Jelly-and-removes/HttpSession/tree/feature/new-architectur e 使う人がわかりやすい事を念頭におく事が大事だと考えるので、このよう
な考え方は良いと考え、この場をお借りして、発言させていただきました。 皆様のご意見、ご感想をいただけますと非常に幸いでございます。 以上となります。
ご静聴いただき誠にありがとうございました。 🎉