$30 off During Our Annual Pro Sale. View Details »

MVVMについて.pdf

keisukeYamagishi
November 28, 2021
280

 MVVMについて.pdf

keisukeYamagishi

November 28, 2021
Tweet

Transcript

  1. 僭越ながら、
    MVVM🤔
    Input
    Output
    について考えてみました。
    Shichimitoucarashi keisuke yamagishi

    View Slide

  2. 自己紹介
    名前: 山岸恵介
    フリーランスの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していただけますと幸いです🎉

    View Slide

  3. 読みやすく、わかりやすく、管理しやすい
    コンセプトは

    View Slide

  4. まずは ’Input’これは入力される値を渡すわけです
    が、工学的🧐 学術的🤔、そして抽象的🤩

    View Slide

  5. わかりづらいと感じます🤓

    View Slide

  6. 受信🎉 わかりやすい気がします(主観ですが)
    なので、 ’Input’は
    Receive

    View Slide

  7. `receive` で定義したサンプルコード
    protocol ViewModelReceive: AnyObject {
    func callApi(_ indexPath: IndexPath)
    }

    View Slide

  8. `Output` に関しても、工学的🧐、学術的
    🤔、そして抽象的🎉

    View Slide

  9. やっぱりこちらもわかりづらいと感じます😇

    View Slide

  10. なので😇
    例えばですが、
    画面遷移を伴うものは、 `route` で定義
    UIに変化を反映させる場合は、 `ui` で定義。

    View Slide

  11. routeのサンプルコード
    protocol ViewModelRoute: AnyObject {
    func detail(_ result: @escaping (Data?, String, HTTPURLResponse?, Error?) -> Void)
    func transition(_ callBack: @escaping () -> Void)
    }

    View Slide

  12. uiのサンプルコード
    protocol ViewModelUI: AnyObject {
    func progress(_ handler: @escaping ((Float) -> Void))
    }

    View Slide

  13. 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)

    View Slide

  14. まとめ
    この書き方については、「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
    使う人がわかりやすい事を念頭におく事が大事だと考えるので、このよう
    な考え方は良いと考え、この場をお借りして、発言させていただきました。
    皆様のご意見、ご感想をいただけますと非常に幸いでございます。
    以上となります。

    View Slide

  15. ご静聴いただき誠にありがとうございました。
    🎉

    View Slide