MVCのすすめ
  @akuraru
今回の目的

• バグを減らしたい
• テストがしたい
• テストの仕方がわからない
• テストしやすい構造で作る
アクティビティ




          レイアウト




                  画面
ありがちのこと
• レイアウトを作る
• とりあえずアクティビティに実装する
• さらにアクティビティに実装する
• できたバンザイ
• MVCなにそれ!?
テストできない
 • 操作→情報処理→状態変化→表示

テストできる
 • 情報処理
 • 情報処理→状態変化
アクティビティ




          レイアウト




                  画面
←テストできる
モデル




      アクティビティ




                レイアウト




                        画面
MVC

• Model-View-Controllerの略

• モデルからプレゼンテーションの分離
• ビューとコントローラーの分離
モデルからプレゼンテーションの分離




テストしやすい部分
       と
テストしにくい部分
テストしやすい部分

• 単純な変換 (文字列処理とか)
• DBアクセス
• 状態変化
テストしにくい部分

• 見た目
• ボタンを押す
• 画面遷移
• 機種依存
ビューとコントローラーの分離



    見た目
      と
     操作
見た目

• ボタン
• 画像
• テキスト
• その他いろいろ
操作


• テキストを入力→文字列処理
• ボタンを押す→状態が変わる
• セーブボタン→DBアクセス
テストしやすい




テストしにくい


    操作              見た目
Model




プレゼンテーション


    Controller           View
Model




                 操作           状態参照    通知

プレゼンテーション


    Controller         変更             View




          入力・操作                  表示



                      ユーザー
今回は
ViewとControllerの分離を
    がんばらない
分離しても
テストしやすくならないし
Model




                 操作           状態参照    通知

プレゼンテーション


    Controller         変更             View




          入力・操作                  表示



                      ユーザー
Model




   操作           状態参照


   プレゼンテーション


入力・操作           表示




        ユーザー
モデル




      アクティビティ




                レイアウト




                        画面
今まで



          インテント             インテント
アクティビティ           アクティビティ           アクティビティ




レイアウト             レイアウト             レイアウト
DB              一時保存




          インテント             インテント
アクティビティ           アクティビティ           アクティビティ




レイアウト             レイアウト             レイアウト
DB               一時保存




               テストできる
               ↑
          インテント              インテント
アクティビティ
               ↓   アクティビティ           アクティビティ

               テストできない


レイアウト              レイアウト             レイアウト
DB              一時保存




  モデル               モデル               モデル




          インテント             インテント
アクティビティ           アクティビティ           アクティビティ




レイアウト             レイアウト             レイアウト
Model
• DBアクセス
• 状態を持つ
• 情報処理

•   CUIでもGUIでも同じものを使えるようにしようと書いてあるけど,
    テストしやすければよい
プレゼンテーション

• 操作
• →モデルに通知
• →必要に応じて遷移
• →モデルに状態に応じて再描画
まとめ

• アクティビティにすべてを書かない
• テストしやすい構造を意識する
• できたらViewとControllerを分けて考え
 る

Mvcのすすめ