SlideShare a Scribd company logo
1 of 29
Download to read offline
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を分けて考え
 る

More Related Content

Viewers also liked

MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考えるtomo_masakura
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門Takuya Kitamura
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているKoichi Tanaka
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Yohei Yasukawa
 

Viewers also liked (7)

MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
MVC 03
MVC 03MVC 03
MVC 03
 
MVC 01
MVC 01MVC 01
MVC 01
 
MVC 02
MVC 02MVC 02
MVC 02
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
 

Similar to Mvcのすすめ

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuoOKUBO_Yusuke
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャKentaro Inomata
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】Tomoharu ASAMI
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVCRyunosuke SATO
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解くKazuhide Maruyama
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】Tomoharu ASAMI
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】Tomoharu ASAMI
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Yu Nobuoka
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCYu Nobuoka
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitShingo Hiraya
 
JPAの基礎と現場で役立つ開発Tips
JPAの基礎と現場で役立つ開発TipsJPAの基礎と現場で役立つ開発Tips
JPAの基礎と現場で役立つ開発Tipsyuichi_kuwahara
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
Qc astah 連携について012
Qc astah 連携について012Qc astah 連携について012
Qc astah 連携について012Kei Nakahara
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetinaKazuya Hirobe
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
オンプレでもクラウドでも データベースサーバの運用
オンプレでもクラウドでも データベースサーバの運用オンプレでもクラウドでも データベースサーバの運用
オンプレでもクラウドでも データベースサーバの運用elanlilac
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 

Similar to Mvcのすすめ (20)

20130316 mix cpp-yuo
20130316 mix cpp-yuo20130316 mix cpp-yuo
20130316 mix cpp-yuo
 
MVVM入門
MVVM入門MVVM入門
MVVM入門
 
GUIのアーキテクチャ
GUIのアーキテクチャGUIのアーキテクチャ
GUIのアーキテクチャ
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
Introduction for Browser Side MVC
Introduction for Browser Side MVCIntroduction for Browser Side MVC
Introduction for Browser Side MVC
 
Grid application テンプレートを紐解く
Grid application テンプレートを紐解くGrid application テンプレートを紐解く
Grid application テンプレートを紐解く
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)Windows ストアアプリのつくりかた (JS + HTML + CSS)
Windows ストアアプリのつくりかた (JS + HTML + CSS)
 
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVCGUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
 
iOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKitiOS 9 Bootcamp #6 UIKit
iOS 9 Bootcamp #6 UIKit
 
JPAの基礎と現場で役立つ開発Tips
JPAの基礎と現場で役立つ開発TipsJPAの基礎と現場で役立つ開発Tips
JPAの基礎と現場で役立つ開発Tips
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
Qc astah 連携について012
Qc astah 連携について012Qc astah 連携について012
Qc astah 連携について012
 
20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina20121201yidev hirobe iPad miniでRetina
20121201yidev hirobe iPad miniでRetina
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
オンプレでもクラウドでも データベースサーバの運用
オンプレでもクラウドでも データベースサーバの運用オンプレでもクラウドでも データベースサーバの運用
オンプレでもクラウドでも データベースサーバの運用
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecture
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 

More from Akura Pi

Githubサービスについて
GithubサービスについてGithubサービスについて
GithubサービスについてAkura Pi
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンAkura Pi
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合Akura Pi
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイルAkura Pi
 
そもそもFloatとは
そもそもFloatとはそもそもFloatとは
そもそもFloatとはAkura Pi
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgentAkura Pi
 
Metaprogramming
MetaprogrammingMetaprogramming
MetaprogrammingAkura Pi
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaultsAkura Pi
 
Groovy base
Groovy baseGroovy base
Groovy baseAkura Pi
 

More from Akura Pi (11)

Githubサービスについて
GithubサービスについてGithubサービスについて
Githubサービスについて
 
Slide
SlideSlide
Slide
 
フィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウンフィア・オブ・ジ・アンノウン
フィア・オブ・ジ・アンノウン
 
ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合ナイーブツリーの入れ子集合
ナイーブツリーの入れ子集合
 
ファントムファイル
ファントムファイルファントムファイル
ファントムファイル
 
そもそもFloatとは
そもそもFloatとはそもそもFloatとは
そもそもFloatとは
 
TableViewAgent
TableViewAgentTableViewAgent
TableViewAgent
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Ns user defaults
Ns user defaultsNs user defaults
Ns user defaults
 
Currying
CurryingCurrying
Currying
 
Groovy base
Groovy baseGroovy base
Groovy base
 

Mvcのすすめ