Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Eight iOSを支えるアーキテクチャVol.2 / architecture to sup...

Sansan
October 23, 2019

Eight iOSを支えるアーキテクチャVol.2 / architecture to support Eight iOS 2

■イベント
Sansan Builders Box 2019
https://jp.corp-sansan.com/sbb2019/

■登壇概要
タイトル:Eight iOSを支えるアーキテクチャVol.2

登壇者:
Eight事業部 池端貴恵

▼Sansan Builders Box
https://buildersbox.corp-sansan.com/

Sansan

October 23, 2019
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

  1. Sansan Builders Box - Eightについて - Eight iOSを⽀えるアーキテクチャ > アーキテクチャとは

    > アーキテクチャのいいところ > Eightのアーキテクチャ Agenda
  2. Sansan Builders Box アーキテクチャとは! アーキテクチャ【architecture】 1. 建築学。また、建築様式。 2. 構造。構成。組織。 3.

    コンピューターの特性を決定するデータの形式やハードウエア の機能分担などを含めた、コンピューターシステムの基本構造。 引⽤: goo辞書 アーキテクチャ = アプリケーション全体の構造
  3. Sansan Builders Box Eightで採⽤しているアーキテクチャ MVVM ( Model View ViewModel )

    採⽤している理由 ・ViewControllerが肥⼤化してしまう課題への解決策 ・RxSwiftのbinding機構を最⼤限に⽣かす
  4. Sansan Builders Box MVVMの構造 ( Apple が提供する UIKit には UIViewController

    という View を管理するクラスが あり、画⾯のライフサイクルと画⾯遷移を担う ) UI Events Data Binding Requests View (ViewController) ViewModel Model Data
  5. Sansan Builders Box Model UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data Entity Request UseCase Repository
  6. Sansan Builders Box 全体 UI Events Data Binding Requests Data

    Request Knows about Knows about Data, Result CRUD View (ViewController) ViewModel UseCase Request Entity Repository Response Model
  7. Sansan Builders Box 処理の流れ UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data シャッターボタンが 押されました 画像をOCRに かけてください
  8. Sansan Builders Box View UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data シャッターボタンが 押されました 画像をOCRに かけてください
  9. Sansan Builders Box ViewModel UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data シャッターボタンが 押されました 画像をOCRに かけてください
  10. Sansan Builders Box Model UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data シャッターボタンが 押されました 画像をOCRに かけてください
  11. Sansan Builders Box Entity (Model) UI Events Data Binding Requests

    Data Request Knows about Knows about Data, Result CRUD ViewModel UseCase Request Entity Repository Response View (ViewController) Model
  12. Sansan Builders Box Entity (Model) struct OCRResult { var name:

    String var companyName: String var title: String? var department: String? }
  13. Sansan Builders Box Request (Model) UI Events Data Binding Requests

    Data Request Knows about Knows about Data, Result CRUD Response ViewModel UseCase Request Entity Repository View (ViewController) Model
  14. Sansan Builders Box Request (Model) struct PostOCRResultRequest: RequestType { typealias

    Response = OCRResult let image: UIImage var method: HTTPMethod { return .PUT } var parameters: [String: AnyObject]? { return ["image": image as AnyObject] } var path: String { return // Path } func responseFromObject(_ object: OCRResult) -> OCRResult? { return OCRResult(from: object) } }
  15. Sansan Builders Box Repository (Model) UI Events Data Binding Requests

    Data Request Knows about Knows about Data, Result CRUD ViewModel UseCase Request Entity Repository Response View (ViewController) Model
  16. Sansan Builders Box Repository (Model) func load() -> OCRResult? func

    find(ID: Int) func update(result: OCRResult) func delete(ID: Int) 読み込み、検索、削除、更新等、データベースの操作を⾏う
  17. Sansan Builders Box UseCase (Model) UI Events Data Binding Requests

    Data Request Knows about Knows about Data, Result CRUD ViewModel UseCase Request Entity Repository Response View (ViewController) Model
  18. Sansan Builders Box UseCase (Model) Entity, Repository, Request を利⽤(依存)して、 必要とされる⼿続きを実⾏する。

    private let repository: OCRResultRepository func check(of image: UIImage) -> Completable { let request = PostOCRResultRequest(image: image) return client .rx_request(request) .flatMapCompletable({ [unowned self] result in return self.repository.save(result: result) }) }
  19. Sansan Builders Box 処理の流れ UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data OCRの結果を表⽰する画⾯ に遷移してください OCRの結果取得に 成功しました✌
  20. Sansan Builders Box 処理の流れ UI Events Data Binding Requests View

    (ViewController) ViewModel Model Data エラーダイアログを 出してください OCRの結果取得に 失敗しました