Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Prochain SlideShare
VIPER アーキテクチャによる iOS アプリの設計
Suivant
Télécharger pour lire hors ligne et voir en mode plein écran

Partager

MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」

Télécharger pour lire hors ligne

2014/11/8 Developers.IO by Classmethod.Inc 発表資料
Androidアプリケーション開発で読みやすく、変更に強く、テストしやすいコードを書くためにはどうしたらいいか?
MVPパターンを用いた設計アプローチと実装例の解説。

MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」

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

    Jun. 23, 2020
  • ShoyaImoto

    Mar. 17, 2019
  • WarikashiSato

    Jun. 22, 2018
  • takahirosatou5686

    Jun. 11, 2017
  • kaz080

    Apr. 18, 2017
  • ssuser34c796

    Feb. 22, 2017
  • ssuser8c3f99

    Jun. 6, 2016
  • gorozarashi

    Apr. 20, 2016
  • ksdn117

    Dec. 22, 2015
  • YuichiHamasaki

    Oct. 29, 2015
  • yutoiwashita

    Jun. 23, 2015
  • yochikun

    Jun. 13, 2015
  • htks27

    Apr. 8, 2015
  • furuya02

    Dec. 20, 2014
  • yukihirai52

    Nov. 8, 2014
  • warppy

    Nov. 8, 2014

2014/11/8 Developers.IO by Classmethod.Inc 発表資料 Androidアプリケーション開発で読みやすく、変更に強く、テストしやすいコードを書くためにはどうしたらいいか? MVPパターンを用いた設計アプローチと実装例の解説。

Vues

Nombre de vues

16 659

Sur Slideshare

0

À partir des intégrations

0

Nombre d'intégrations

679

Actions

Téléchargements

37

Partages

0

Commentaires

0

Mentions J'aime

16

×