狠狠撸

狠狠撸Share a Scribd company logo
2014/11/8 Developers.IO Meetup 10 
あなたのアプリ 
報?連?相できてますか? 
スマホアプリ開発あしたの為の環境と設計のアプローチ 
Copyright ? Classmethod, Inc. 1 
横山U大
こんにちは 
横山U大(27) 
北海道釧路市出身 
Copyright ? Classmethod, Inc. 2 
これまで 
? 建設業(設計?施工) 
? ミュージシャン気取り 
? 飲食業店長 
今のお仕事 
? Android エンジニア 
? デザイン 
? プロジェクトリーダー
今日のお話 
? MVPパターンについて 
? 実装例の解説 
? まとめ 
Copyright ? Classmethod, Inc. 3
MVPパターンについて 
Copyright ? Classmethod, Inc. 4
MVPパターンについて 
MVCって 
よく聞くよね 
もう少し柔軟に 
MVPパターン 
(Model – View – Presenter) 
Copyright ? Classmethod, Inc. 5
MVPパターンについて 
Model 
View 
Presenter 
MVC のModel と同様にドメインロジックのみ 
を持つ。 
Model はView やPresenter に依存しない。 
画面の表示とユーザー入力の受付を担当する。 
ユーザー入力はPresenter に渡す。 
MVC のようなModel の監視は必須ではない。 
MVC のController とは違い、UI のビジネスロ 
ジックを含みインタフェースを通じてView を 
操作する。 
Copyright ? Classmethod, Inc. 6
実装例の解説 
Copyright ? Classmethod, Inc. 7
実装例の解説 
超 
ラッキー 
今日の運勢 
? 今日の運勢ボタンを押す 
? 今日の運勢を取得する 
? 今日の運勢を表示する 
楽勝だね 
Copyright ? Classmethod, Inc. 8
MVPパターンを利用しない場合 
Copyright ? Classmethod, Inc. 9
実装例の解説– MVPパターンを利用しない場合 
public class MainActivity extends Activity implements OnClickListener { 
private DivinationManager mDivinationManager; 
private Button mButton; 
private TextView mTextView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
mDivinationManager = new DivinationManager(); 
mTextView = (TextView)findViewById(R.id.textView); 
mButton = (Button)findViewById(R.id.button); 
mButton.setOnClickListener(this); 
} 
Copyright ? Classmethod, Inc. 10
実装例の解説– MVPパターンを利用しない場合 
@Override 
public void onClick(View v) { 
showProgress(); 
mDivinationManager.get(new DivinationDelegate() { 
@Override 
public void completeDivination(String result) { 
mTextView.setText(result); 
dismissProgress(); 
} 
}); 
} 
private void showProgress() { ???} 
private void dismissProgress() { ???} 
} 
Copyright ? Classmethod, Inc. 11
実装例の解説– MVPパターンを利用しない場合 
public class DivinationManager { 
public static interface DivinationDelegate { 
void completeDivination(String result); 
} 
public void get(DivinationDelegate delegate) { 
??? 
delegate.completeDivination("result"); 
} 
} 
Copyright ? Classmethod, Inc. 12
実装例の解説– MVPパターンを利用しない場合 
機能が増えたらActivity が肥大化して 
いくよね 
UI ロジックのテストをするには 
Android 端末で実行する必要があるな 
Copyright ? Classmethod, Inc. 13
MVPパターンを利用した場合 
Copyright ? Classmethod, Inc. 14
実装例の解説 
ユーザーの入力を 
Presenter に渡す 
Copyright ? Classmethod, Inc. 15 
Model に 
メッセージを送る 
Presenter に 
データを提供する 
Presenter が 
View を操作する
実装例の解説– MVPパターンを利用した場合 
public class MainActivity extends Activity implements IMainActivity, 
OnClickListener { 
private MainPresenter mMainPresenter; 
private Button mButton; 
private TextView mTextView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
mPresenter = new MainPresenter(); 
mPresenter.setView(this); 
mTextView = (TextView)findViewById(R.id.textView); 
mButton = (Button)findViewById(R.id.button); 
mButton.setOnClickListener(this); 
} 
Copyright ? Classmethod, Inc. 16
実装例の解説– MVPパターンを利用した場合 
@Override 
public void onClick(View v) { 
mPresenter.startDivination(); 
} 
@Override 
public void showProgress() { ???} 
@Override 
public void dismissProgress() { ???} 
@Override 
public void setResultText(String result) { 
mTextView.setText(result); 
} 
} 
Copyright ? Classmethod, Inc. 17
実装例の解説– MVPパターンを利用した場合 
public interface IMainActivity { 
void showProgress(); 
void dismissProgress(); 
void setResultText(String result); 
} 
Copyright ? Classmethod, Inc. 18
実装例の解説– MVPパターンを利用した場合 
public class MainPresenter { 
private IMainActivity mView; 
private IDivinationManager mDivinationManager; 
public MainPresenter() { 
mDivinationManager = new DivinationManager(); 
} 
public void setView(IMainActivity view) { 
mView = view; 
} 
public void startDivination() { 
mView.showProgress(); 
mDivinationManager.get(new DivinationDelegate() { 
@Override 
public void completeDivination(String result) { 
mView.setResultText(result); 
mView.dismissProgress(); 
} 
}); 
} 
} 
Copyright ? Classmethod, Inc. 19
実装例の解説– MVPパターンを利用した場合 
public interface IDivinationManager { 
void get(DivinationDelegate divinationDelegate); 
} 
public class DivinationManager implements IDivinationManager { 
public static interface DivinationDelegate { 
void completeDivination(String result); 
} 
@Override 
public void get(DivinationDelegate delegate) { 
??? 
delegate.completeDivination("result"); 
} 
} 
Copyright ? Classmethod, Inc. 20
実装例の解説 
ユーザーの入力を 
Presenter に 
報告する 
Copyright ? Classmethod, Inc. 21 
報告の内容を 
Model に 
連絡する 
自分では解決できないことを 
データ層に相談する
実装例の解説– MVPパターンを利用した場合 
Presenter はView の実装に依存しない 
から、UI ロジックのテストが容易にな 
るね! 
少し強引だけど、MVPパターンは 
報?連?相パターンだね!! 
Copyright ? Classmethod, Inc. 22
まとめ 
Copyright ? Classmethod, Inc. 23
MVPパターンを利用すると 
? UIロジックのテストが実行しやすくな 
る(Viewが差し替えできる) 
? コードが役割毎に分離されてActivity 
が肥大化しずらくなる 
? 実装にルールができるので、いちいち 
迷わなくなる 
? 実装の説明が上手になる 
Copyright ? Classmethod, Inc. 24
変更に強い 
読みやすいテストしやすい 
アプリの報?連?相が有効 
Copyright ? Classmethod, Inc. 25
惭痴笔パターンによる设计アプローチ「あなたのアフ?リ报连相て?きてますか」

More Related Content

What's hot (20)

PDF
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
?
PDF
【Unity】Scriptable object 入門と活用例
Unity Technologies Japan K.K.
?
PDF
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
PPTX
UniRxでMV(R)Pパターン をやってみた
torisoup
?
PDF
イミュータブルデータモデル(入门编)
Yoshitaka Kawashima
?
PPTX
搁笔骋におけるイヘ?ント駆动型の设计と実装
Koji Morikawa
?
ODP
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
pospome
?
PDF
Assembly Definition あれやこれ
NakanoYosuke1
?
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
?
PDF
鲍苍颈迟测开発で使える设计の话+窜别苍箩别肠迟の绍介
torisoup
?
PDF
できる!并列?并行プログラミング
Preferred Networks
?
PDF
鲍苍颈搁虫完全に理解した
torisoup
?
PPTX
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
Shota Shinogi
?
PDF
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
PDF
20分くらいでわかった気分になれる颁++20コルーチン
yohhoy
?
PPTX
モバイルアプリにおけるアーティストフレンドリーな水面表现戦略
Haruki Yano
?
PDF
Epic Online Services でできること
エピック?ゲームズ?ジャパン Epic Games Japan
?
PDF
ソーシャルゲームのためのデータベース设计
Yoshinori Matsunobu
?
PDF
谁も础诲诲谤别蝉蝉补产濒别について语らないなら、自分が语るしかない…ッッッッ
Tatsuhiko Yamamura
?
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
?
【Unity】Scriptable object 入門と活用例
Unity Technologies Japan K.K.
?
オブジェクト指向プログラミングのためのモデリング入门
増田 亨
?
UniRxでMV(R)Pパターン をやってみた
torisoup
?
イミュータブルデータモデル(入门编)
Yoshitaka Kawashima
?
搁笔骋におけるイヘ?ント駆动型の设计と実装
Koji Morikawa
?
骋辞のサーハ?サイト?実装におけるレイヤ设计とレイヤ内実装について考える
pospome
?
Assembly Definition あれやこれ
NakanoYosuke1
?
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
?
鲍苍颈迟测开発で使える设计の话+窜别苍箩别肠迟の绍介
torisoup
?
できる!并列?并行プログラミング
Preferred Networks
?
鲍苍颈搁虫完全に理解した
torisoup
?
ネットストーカー御用达翱厂滨狈罢ツール叠濒补肠办叠颈谤诲を触ってみた.辫辫迟虫
Shota Shinogi
?
オブジェクト指向の设计と実装の学び方のコツ
増田 亨
?
20分くらいでわかった気分になれる颁++20コルーチン
yohhoy
?
モバイルアプリにおけるアーティストフレンドリーな水面表现戦略
Haruki Yano
?
Epic Online Services でできること
エピック?ゲームズ?ジャパン Epic Games Japan
?
ソーシャルゲームのためのデータベース设计
Yoshinori Matsunobu
?
谁も础诲诲谤别蝉蝉补产濒别について语らないなら、自分が语るしかない…ッッッッ
Tatsuhiko Yamamura
?

Viewers also liked (6)

PDF
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
?
PDF
ドメインロジックに集中せよ ?ドメイン駆動設計 powered by Spring
増田 亨
?
PDF
スタートアップの戦略&ビジネスモデルの考え方
Takaaki Umada
?
PDF
逆説のスタートアップ思考的「逆张りワークショップ」手顺书
Takaaki Umada
?
PDF
リーンスタートアップにおける良い仮説、悪い仮説
Takaaki Umada
?
PDF
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
Itsuki Kuroda
?
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
?
ドメインロジックに集中せよ ?ドメイン駆動設計 powered by Spring
増田 亨
?
スタートアップの戦略&ビジネスモデルの考え方
Takaaki Umada
?
逆説のスタートアップ思考的「逆张りワークショップ」手顺书
Takaaki Umada
?
リーンスタートアップにおける良い仮説、悪い仮説
Takaaki Umada
?
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
Itsuki Kuroda
?
Ad

Similar to 惭痴笔パターンによる设计アプローチ「あなたのアフ?リ报连相て?きてますか」 (10)

PDF
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
Mami Shiino
?
PPTX
Mvpvm pattern
Mami Shiino
?
PDF
Model View Presenter for Android
shinnosuke kugimiya
?
PDF
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
Ken Morishita
?
PPTX
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
?
PDF
Android Architecture
shinnosuke kugimiya
?
PPTX
いまさら学ぶ惭痴痴惭パターン
Yuta Matsumura
?
PDF
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
?
PPTX
Developers.IO 2016 F-1 セッション資料
Shinichi Hirauchi
?
PDF
20140827冲勉强会挨拶
Hiraku Komuro
?
RIAアーキテクチャー研究会 第3回 セッション4 Mvpvm pattern
Mami Shiino
?
Mvpvm pattern
Mami Shiino
?
Model View Presenter for Android
shinnosuke kugimiya
?
颈翱厂や础苍诲谤辞颈诲アフ?リ开発の骋辞辞诲笔谤补肠迟颈肠别
Ken Morishita
?
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
?
Android Architecture
shinnosuke kugimiya
?
いまさら学ぶ惭痴痴惭パターン
Yuta Matsumura
?
C# コーディングガイドライン 2013/02/26
Yoshihisa Ozaki
?
Developers.IO 2016 F-1 セッション資料
Shinichi Hirauchi
?
20140827冲勉强会挨拶
Hiraku Komuro
?
Ad

Recently uploaded (13)

PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
渔船に搭载されている电子装备と渔法について冲痴搁颁海洋学研究会冲海の尝罢会発表资料
Yuuitirou528 default
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
第3回テ?シ?タル理学疗法学会のシンポジウム「デジタル理学疗法の组织活用:教育?管理?研究を繋ぐ新たな地平」での话题提供
Matsushita Laboratory
?
PDF
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
PDF
第3回デジタル理学疗法研究会学术大会シンポジウム「デジタル理学疗法の组织活用:教育?管理?研究を繋ぐ新たな地平」の讲演资料.
Matsushita Laboratory
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
渔船に搭载されている电子装备と渔法について冲痴搁颁海洋学研究会冲海の尝罢会発表资料
Yuuitirou528 default
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
第3回テ?シ?タル理学疗法学会のシンポジウム「デジタル理学疗法の组织活用:教育?管理?研究を繋ぐ新たな地平」での话题提供
Matsushita Laboratory
?
AIツールを使った研究の効率化 Improving Research Efficiency with AI Tools
Tohoku University
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
第3回デジタル理学疗法研究会学术大会シンポジウム「デジタル理学疗法の组织活用:教育?管理?研究を繋ぐ新たな地平」の讲演资料.
Matsushita Laboratory
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?

惭痴笔パターンによる设计アプローチ「あなたのアフ?リ报连相て?きてますか」

Editor's Notes

  • #6: MVCパターンについては一度は耳にしたことがあるのではないでしょうか? MVCパターンと一口に言っても、様々な派生パターンがあって人それぞれ認識が違ったりします。 アプリをMVCで作れ!といわれても、実際はまらないしパターンの規則をいたるところで破ってMVCといっている意味がなくなる
  • #22: ビューがモデルを監視するものを「監視コントローラ」、 ビューがモデルを監視しないものを「パッシブ?ビュー」と呼んで区別することもある。