SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【Developers Boost KANSAI】セッションレポート(AD)

多機能なアプリの設計をシンプルに保つ手法とは? Eight iOSを支えるアーキテクチャ【Developers Boost KANSAI】

Eight iOSを支えるアーキテクチャ

  • X ポスト
  • このエントリーをはてなブックマークに追加

シンプルなコードを実現するための設計ノウハウ

 iOS版「Eight」では、ModelをさらにEntity、Repository、Request、UseCaseの4つに細分化している。それぞれが担う役割は以下の通りだ。

Entity
  • データ構造を定義する構造体
Repository
  • EntityのCRUD操作を提供する
  • SQLiteやUserDefaults等のDataSourceを隠蔽
Request
  • HTTPRequestを投げる処理を定義する
UseCase
  • ビジネスロジックを記述する

 河辺氏は前述の「フォローしているアカウントの一覧画面」を例に、各層がどのように動作しているかをサンプルコードとともに解説した(河辺氏が説明に使用したコードはこちらのスライドに掲載されている。興味を持たれた方はぜひ参照してほしい)。

 まず、Entityでは構造体を用いてデータを定義する。一覧画面ではフォローしているアカウントのリストを表示するため、FollowingPersonという名前で構造体を作成し、Viewで表示するために必要なデータを持たせる。

 次に、Requestでは「Responseの型(先ほどEntityで定義したFollowingPersonの配列)」「HTTP Method」「HTTP Methodを投げるPath」「Responseを受け取った際の処理」を定義する。RepositoryではProtocol(Interface)にCRUD操作のメソッドを定義し、実装クラスにCRUD操作の実処理を書いていく。

 UseCaseでは先ほど定義したEntityやRepository、Requestを使ってビジネスロジックの記述を行う。このクラスでは、具体型ではなく抽象に依存するように実装し、Initializerで依存性を注入する。依存関係逆転の原則を適用し、変化しやすい具象ではなく安定した抽象に依存することで、変化に強い設計としているのだ。クラスの外から必要なものを注入することで、モックの差し込みが容易となりテストしやすいコードとなる。

 ViewModelでは、Viewで表示するために必要なEntityを公開プロパティとして定義する。そして、「ViewからUI Eventを取得する」「Event受け取り時にModelに対して処理の依頼を行う」などの役割も担う。

 Viewでは、画面起動のEventを通知する処理を行う。また、「ViewModelにEventを伝える」「ViewModelからデータを受け取りViewにデータを反映させる」などの処理もこのクラスが行っている。

 「このように、iOS版『Eight』ではMVVMパターンを採用し、各層のすべきこと・すべきできないことを明確にして実装しています。また、変化しやすい具象への依存は避けて抽象へ依存することで、変化に強い設計をつくり上げているのです」

 河辺氏は最後にこのように語り、本セッションを締めくくった。

お問い合わせ

 Sansan株式会社

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【Developers Boost KANSAI】セッションレポート連載記事一覧
この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11601 2019/07/02 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング