はじめに
現在、私が担当しているプロジェクトではClean Architectureを用いて開発しています。
Clean Architectureの記事はたくさんある中で、私は今までMVCでしか開発してこなかった自分のためにも、備忘録として残そうと思い投稿しました。
プロジェクトも半ばではありますが、ひとまずここまで開発してきて感じたことをまとめます。
環境
- MacBook Pro (13-inch, 2017)
- macOS Mojave(varsion: 10.14.1)
- Core i5, Memory 16GB
- Xcode(varsion: 10.1)
Clean Architecture
Clean Architectureといえば、この図が真っ先に出てくると思います。
これを最初見た時なんの事やらさっぱりでした、、、、、が、以下の記事を参考に見てみると大分理解できました。
実装クリーンアーキテクチャ
Clean Architectureで分からなかったところを整理する
構成
構成は以下のようにしています。
本来ならUseCaseとModelの仲介役としてTranslatorが存在知るのですが、今回プロジェクトとの兼ね合いからTranslatorは使用しませんでした。。。。。。。😅
ざっくりと説明すると、
###Presenter
-
ViewとUseCaseの橋渡しを担う
-
ViewにModelを渡したり、UseCaseの処理を行う
###View(ViewController) -
ViewのイベントをPresenterへ通知
-
Modelに応じて表示させる
###UseCase -
必要な業務ロジック
###Model -
Viewに必要なValue Object
###DataStore -
通信やデータ管理を行う
###Entity -
DBのValue Object
###Builder(Provider) -
各レイヤーに依存性の注入
###Wireframe -
画面遷移や画面間のイベントを渡す
-
Builderを呼ぶ
まとめ
メリット
-
レイヤーごとに役割がある程度決まっているため、コードの置き場所に迷うことが少なくなる。
-
上と同じ理由から、途中から要員が参入しても設計自体崩れにくい。
-
ある程度命名規則があるため、統一感を持たせやすい。
-
テストがしやすい
-
運用・保守がしやすいはず(これからに期待)
###デメリット
-
コード・ファイル量が多くなる。
-
冗長なコードが出てきてしまう。
-
導入コストがある。(私がもっと優秀だったなら。。。よかった)
メリットの点で特に感じたのが、途中から要員が参入しても設計自体崩れにくいことですね。
担当のプロジェクトでも途中からメンバーが増員されたのですが、
レイヤーごとに役割が細分化されているので、説明はディレクトリ構成ぐらいで
後はすんなり開発を進められているように見えます。
その方が優秀であることもすんなり進められている要因ではありますが!
デメリットの点では開発当初は、
MVCでの感覚で開発していると、なんで1つの画面にこんなに時間がかかるんだと感じていました。
最近は慣れてきましたが、やはりまだMVCで開発していた時と比べてかかっている気がします。
また、開発が遅いと感じる理由に学習コストもかかっているからだと思います。
初めてのClean Architectureだったので、
思想やそれを踏まえての構成であったりと理解するのにどうしても時間がかかっている印象です。(現在進行形)
メリット、デメリットまとめてみました。その結果として感じたことは、
Clean Architectureをどのプロジェクトにも絶対取り入れた方がいいとは思ってはおらず、
プロジェクトの規模や開発メンバーに合うものを取り入れていくことがベターだと思います。
ただ、プロジェクトの規模が大きいのであればClean Architectureオススメです。という一個人の感想で締めたいと思います。
##参考
実装クリーンアーキテクチャ
Clean Architectureで分からなかったところを整理する
https://speakerdeck.com/koutalou/ios-clean-architecture-falsesusume?slide=11
まだMVC,MVP,MVVMで消耗してるの? iOS Clean Architectureについて