LoginSignup
4
4

More than 1 year has passed since last update.

【iOS × アーキテクチャ】iOSにおける、GUI/システムアーキテクチャとは?

Posted at

目的

GUIアーキテクチャ システムアーキテクチャ についてまとめること

流れ

  1. そもそも、アーキテクチャ とは?
  2. GUIアーキテクチャ の例
  3. GUIアーキテクチャ とは?
  4. システムアーキテクチャ の例
  5. システムアーキテクチャ とは?
  6. モバイルアプリ開発における問題点
  7. 5を解決するアーキテクチャ

0. そもそも、アーキテクチャ とは?

アプリケーションを開発する上で、開発者同士の共通認識を行うためのもの

開発者同士の共通認識とは?
→ 3つある

① : クラスなどの要素の関係性整理
② : 伝達順序の整理
③ : 開発の規則性

根幹にあるものは?
Presentation Domain Separation : プレゼンテーション領域の分離 という考え。
「システム本来の関心領域(ドメイン)を、UI(プレゼンテーション)から引き離す」 ということ。
プレゼンテーション( =View ), ドメイン( =Model ) を分けて考えましょうね。 というもの。
※ プレゼンテーション と ドメイン については、下の補足にて説明があります。

種類(iOSの場合)
一般的にiOSアプリのアーキテクチャと呼ばれているものには、2種類存在する。
GUIアーキテクチャシステムアーキテクチャ だ。
次の章からは、GUI/システムアーキテクチャについて、採用されているアーキテクチャの例をだしながら説明していく。
(それぞれのアーキテクチャについての説明は、また後日...)

補足

■ プレゼンテーション・ドメイン とは?
プレゼンテーション ( =View ):
「UIに関係するロジック, ユーザーが操作する画面」
どのようにレイアウトを行い、情報を装飾するか を考えている

ドメイン ( =Model ):
「アプリケーションのユーザーが思い描く、"システム本来の関心領域"」
情報をどのようにモデリングし処理するか を考えている

■ プレゼンテーション と ドメイン を分けるメリット
・役割が分かれているため、理解しやすい
・それぞれを一つのオブジェクトとして扱えるため、コードの重複を防げる
・複数人での開発で、分業がしやすい
・テストコードが書きやすい

1. GUIアーキテクチャ の例

GUIアーキテクチャには以下のアーキテクチャが含まれる。

MVC :Model-View-Controller
Presentation Model パターン (MVC+Presentation Model)
MVVM :Model-View-ViewModel
MVP :Model-View-Presenter
Flux

2. GUIアーキテクチャとは

Viewからの視点で、PDSを実践するため際の具体的なレイヤー構造をパターンとして示したもの。

GUIアーキテクチャの "欠点"

「UIか、それ以外か」 という分け方しかできないこと
GUIアーキテクチャにおいて、「Model=UIに関係しない処理全て」となってしまう
しかし、UIに関係しない処理 の中にも様々な種類が存在する。それを分けることなく、Modelという1つにまとめて考えるのは危険。

以下の2つは、本来 プレゼンテーション・ドメイン どちらにも当てはまらない。しかし、GUIアーキテクチャでは、「ドメイン( =Model )としてひとまとめにされる」 → 役割ごとに分類を行えていない
①:サーバ API からのデータ取得を試 み、そこで発生したネットワークエラーをハンドリングする
②:データをストレージに永続化する」

3. システムアーキテクチャ の例

システムアーキテクチャには以下のアーキテクチャが含まれる。

レイヤードアーキテクチャ
Hexagonal Architecture
Onion Architecture
Clean Architecture

4. システムアーキテクチャ とは?

"GUI"アーキテクチャの汎用性を増したもの
さらに詳しくいうと、"システム"アーキテクチャは、"GUI"アーキテクチャよりも広い、UIという単位にとらわれることなくシステム全体の構造を示せるもの。
「システムアーキテクチャ > GUIアーキテクチャ」

なぜそう言えるのか?

GUIでは行っていない、ドメインの先をどのように分けるのか ということを考えているから。

GUIアーキテクチャは、プレゼンテーションとドメインを分けて考える。
しかし、ここでのドメインとはUIに関係しない処理全てとなる。
「情報をどのようにモデリングし処理するか」を考えているドメイン が、このような曖昧な定義では開発を行う上で、開発者同士の混乱を招きかねない。

そこで、システムアーキテクチャでは、GUIアーキテクチャでは考えない、「ドメインの先でどのようにレイヤーを切り分けるべきか」や「システム全体をどのように接合すべきか」といったものを考える。

5. モバイルアプリ開発における問題点

モバイルアプリ開発における問題点は、「画面遷移」です。

1〜4 では、GUI/システムアーキテクチャについて説明を行った。
しかし、「モバイルアプリ開発においては重要であるにも関わらずどちらのアーキテクチャでもヒントを与えてくれない関心事」があります。
それが 画面遷移 です。

モバイルアプリは、Webアプリ と違い、UIコンポーネントが大きい。操作を指で行うためです。
一画面に多くの情報を載せることが難しく、画面遷移を繰り返すことで快適なユーザー体験を実現した。

しかし、「多くの画面遷移をどう設計するのか」は既存のアーキテクチャでは対処できない問題となっています。

次の章では、それを解決するためのアーキテクチャをいくつか示します。

6. 5を解決するアーキテクチャ

Coordinatorパターン と MVVM-C
Routerパターン と VIPER
Micro View Contrller

参考文献

『iOSアプリ設計パターン』 (電子版: 税込 3200円)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4