Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BaseViewControllerは作りたくない

5,448 views

Published on

第13回potatotipsで発表した資料です
http://connpass.com/event/10697/

Published in: Technology
  • Be the first to comment

BaseViewControllerは作りたくない

  1. 1. iOSアプリの設計で BaseViewControllerは作りたくない 株式会社キュリオシティソフトウェア 今城善矩(@yimajo)
  2. 2. 何の話か
  3. 3. 【前提】 iOSアプリ開発では 基本的にUIViewControllerを 各画面用に継承して利用する UIViewController ViewController ViewController
  4. 4. その際、アプリ独自の処理を実装するため にBaseViewControllerを作って各画面用の ViewControllerが継承して使うことがある UIViewController BaseViewController ViewController ViewController
  5. 5. これはViewControllerのライフサイク ルに応じて勝手に動作する 親クラス設計している
  6. 6. • 各画面共通の処理をライフサイクルに合 わせてまとめられる
  7. 7. • 各画面ごとの実装に集中できる
  8. 8. このやり方は効率的!
  9. 9. 会場の皆さんに質問です BaseViewController/BaseActivityを よく作るという方 挙手でお知らせください (・ω・)ノノノノノシ (´∀`)ノノノノノシ 追記: 会場ではiOS 3人,Android 12人ぐらい居ました
  10. 10. でも
  11. 11. このやり方って自分は経験上良く ない場面に遭遇することが多く
  12. 12. 正解とかベストプラクティス がどうとかじゃなく
  13. 13. 継承という仕組みを 開発効率や問題解決 のために使うと アプリの仕様変更がある際に 影響範囲を大きくしてしまう
  14. 14. 画面数多くなる画面数少ない BaseViewController メリット 勝手なイメージ BaseViewController デメリット
  15. 15. しかし ケースバイケースのような気 もするし
  16. 16. 好みの問題のような気がしな くもない
  17. 17. ずっとモヤモヤしてたので
  18. 18. 先にQiitaで公開して 整理しフィードバック集めてみた http://qiita.com/yimajo/items/8ef1850e1362bd3bf3d8
  19. 19. 反応(2015.1.14現在) • 閲覧数4760 • ストック数 98 • はてブ 86 • Tweet 94 • コメント 1
  20. 20. 2015年元旦に おとそ気分でQiitaに投稿してみ たけど案外反応があったので
  21. 21. 正月三が日は エゴサーチして過ごした
  22. 22. 具体的に書かれている意見を 集めた
  23. 23. “わかる。AndroidのBaseActivityも同じ問題起きま すね”
  24. 24. “ぼくもBVC作るのはあまり好きじゃない。デメ リットはここにあげたことのほか、そのプロジェ クトに対する学習コストが増えるってのもある とおもう”
  25. 25. “私もBaseViewControllerは反対。たいていBaseを つかわなくてすむ方法はあるし、プロジェクト 規模が大きくなるにつれ、弊害が増える”
  26. 26. “BaseViewControllerのようなものをちゃんと設計 して作るのは難しいので、世の中の BaseViewControllerはたいていダメな実装になっ ていて、そしてクラスの性格上プロジェクト全 体でそれが使われるので後から直せない、とい うのが私の見てきたパターン”
  27. 27. “まぁ改善する用にお願いされるプロジェクトと いうのはそもそも要件が右行ったり左行ったり 曲がるプロジェクトなので、それと相性が致命 的に悪いだけとも言えます”
  28. 28. “確かにBaseViewControllerとかやると簡単に破綻 していくな。継承すると不都合が出るケースは あるだろうし、そうして継承しないクラスが出 ると、それはBaseでも何でもなくなる。したら 名付けをBaseじゃなくて、具体的な機能の名前 にした方が良さそうね”
  29. 29. “BaseViewControllerとか UIViewController+Commonは甘え”
  30. 30. フィードバックありがとう ございました
  31. 31. フィードバックの内容を読んだ 感じでは…
  32. 32. BaseViewController 使わないで済む 方法について検討し 実行した上の意見じゃないかと思う
  33. 33. ここで 継承を使ったViewController設計が 実装に応じて進化していく例を お見せしよう
  34. 34. UIViewController BaseViewController VC VC VC 「私の戦闘力は53万です…ですが、もちろんフルパワーで あなたと戦う気はありませんからご心配なく…」
  35. 35. UIViewController BaseViewController A VC BaseViewController B VC VC VC 「何しろ力があり余っているんだ。ちょっとやりすぎてしまうか もしれん。くっくっく…戦闘力にしたら100万以上は確実か…」
  36. 36. UIViewController BaseViewController A VC BaseViewController B VC VC VC BaseViewController C VC 「このフリーザは継承をするたびにパワーがはるかに増す… その変身をあと2回もオレは残している…その意味がわかるな?」
  37. 37. UIViewController BaseViewController A VC BaseViewController B VC VC VC BaseViewController C VC SuperBaseView Controller 「光栄に思うがいい!この変身まで見せるのは貴様らが初めてだ!」
  38. 38. UIViewController BVC A VC BCV CA SuperBaseTableView Controller UITableView Controller UICollectionView Controller SuperBaseView Controller SuperBaseCollection ViewController BVC B BVC C VC VC VC BTV CA BTV CB BCV CB VC VCVC VC VC VC VC VC VC VC 「大サービスでご覧に入れましょう! わたくしの最後の変身を…わたくしの真の姿を…」
  39. 39. あなたが例えば 同僚からこういう コードを引き継いだら大変
  40. 40. 画面を増やしたいって時に
  41. 41. ViewControllerの設計を把握し 実装を細かく理解しないと 対称性を崩してしまって良く ない気分になる
  42. 42. 他の画面の実装を細かく理解 すればするほど突っ込みどこ ろが気になってきたりする
  43. 43. まとめ
  44. 44. • ひとりきりでやりきるときは問題ないけ ど他人のコードだと涙すら流れる! • ケースバイケースだからと停止せず、踏み 込んで整理して公開してすっきり

×