T&T United Inc.

Knowledge over the Air

【連載】iOS/Androidアプリ開発入門「サーバ連動アプリを開発しよう!」 (4) モデル実装

      2015/03/12

みなさん、こんにちは!

第3回「(3) API実装」の続編です。

前回同様、本格的なアプリを開発するためには「何を知っておかなければならないか」「何を勉強すればいいか」を中心に書いていきたいと思います。

今回はモデルの実装を進めます。

早速はじめていきましょう。

スポンサーリンク

モデルを実装する

(1) データベース設計と整合性をとる

モデルを実装するにあたり第1に大切なことは、データベース設計と整合性をとることです。

モデルの実装をデータベース設計と一致させることで、データの取得・加工・保存が大幅に楽になります。

本連載第2回「(2) 画面設計・データベース設計・API設計」において、データベース設計を以下の通りとしました。

id int(11) NOT NULL 主キー AUTO_INCREMENT
text varchar(256) NOT NULL
created datetime NOT NULL
modified datetime NOT NULL

従って、サーバ側・アプリ側のモデルの実装もこれと整合性をとり、以下のようにします。

サーバ側(CakePHPの場合)
class Post extends AppModel {
  public $validate = array( ・・・(1)
    'id' => array(
      'rule' => 'naturalNumber',
      'on' => 'update',
      'required' => true,
      'allowEmpty' => false,
      'message' => 'Invalid ID'
    ),
    'text' => array(
      'rule' => array('between', 1, 256),
      'required' => true,
      'allowEmpty' => false,
      'message' => 'Please input text'
    )
  );
}
アプリ側(Androidの場合)
public class Post {

  int id; ・・・(2)
  String text;

  public int getId() { return id; }
  public void setId(int id) { this.id = id; }

  public String getText() { return text; }
  public void setText(String text) { this.text = text; }

}

ポイントは以下のとおりです。

(1) データベース設計にあわせて、モデルのバリデーションルールを定義する
(2) データベース設計にあわせて、モデルのパラメータを定義する

なお、今回は省略しましたが、created, modifiedの2カラムもモデルに実装しておくとよいでしょう。

(2) プログラムはモデルに書く

モデルを実装するにあたり第2に大切なことは、プログラムはコントローラー(C)ではなくモデル(M)に書くというMVCの原則です。

モデルに書くプログラムの典型例は、以下のとおりです。

  • (データベースやファイルから)データを取得する
  • データを加工する
  • データをバリデーションする
  • データを保存する

今回の例では、次のようなプログラムをモデルに書いていきます。

サーバ側(CakePHPの場合)
class Post extends AppModel {

  public function add($data) { ・・・(1)
    $this->create();
    return $this->save($data);
  }

  public function viewAll() { ・・・(2)
    return $this->find('all');
  }

}
アプリ側(Androidの場合)
public class Post {

  public boolean validate() { ・・・(3)
    if (text != null && text.length() > 0 && text.length() < 256) {
      return true;
    } else {
      return false;
    }
  }

}

ポイントは以下のとおりです。

(1),(2),(3) コントローラーにこれらのプログラムを書かず、モデルに書く

こうしておけば、将来「2014年以前の投稿は表示しない」といった新たな要件がアプリに追加されたとき、モデルを1箇所修正すれば、すべての画面・機能に一括で反映されるようになります。

反対に、MVCの原則を無視し、$this->Post->find('all');といったデータを取得するプログラムを様々なコントローラーに(コピペで)直接書いていると、新たな要件がアプリに追加されたとき、「いったいどことどこを修正すればいいんだ?」ということになってしまいます。

第4回のまとめ

APIの実装が終わったら、モデルを実装しましょう。

  • モデルの実装は、データベースの設計と整合性をとる
  • プログラムはモデルに書き、コントローラーには書かない

本日は以上です。

連載目次

iOS/Androidアプリ開発入門「サーバ連動アプリを開発しよう!」

(10) 開発の旅をうまく乗り切る(最終回)
(9) バックグラウンドでメール送信
(8) サーバの監視とデータのバックアップ
(7) リモートサーバ(本番環境)の構築
(6) ローカルでの単体・結合テスト
(5) コントローラーとビューの実装
(4) モデル実装
(3) API実装
(2) 画面設計・データベース設計・API設計
(1) 開発環境の構築

スポンサーリンク

 - コラム, 連載 ,