プログラムで行うことが増加し、複雑に入り組んでくると、ひとつひとつのクラスやメソッドが肥大し、後の修正や、機能追加のさいの障害になりかねない。そうならないためには、コーディングを行いながら、上手く全体の設計を修正していく必要がある。今回もコーディングを行いながら、設計を組み替えていく作業を行った。
一つめは、ACTIONに応じて処理を振り分ける制御クラスを作成したことだ。具体的には、アプリからのリクエストに応じて行われる処理を、SWITCH文を用いて切り替えている。処理の内容も、中身に応じたクラスに処理させることで、直感的に分かりやすくなるよう配慮した。
class DuelActionController{
function open($request)
{
//制御
switch($action){
//対戦相手検出
case ACTION_SEARCH:
$list = new DuelistList($utn);
$result = $list->search();
break;
//バトル
case ACTION_ATTACK:
$duel = new Duel($user_id);
$result = $duel->attack($card);
break;
//ゲーム終了
case ACTION_RESULT:
$duel = new Duel($user_id);
$result = $duel->finalize($res);
break;
default:
$this->_respondError();
}
//略
}
| |
またさらにもう一つ、DBAccessクラスを管理するDBオブジェクト管理クラスを作成した。DBAceessクラスをいちいちインスタンス化するのは面倒だし、場合に応じて何をインスタンス化すべきか考えるのも複雑になってしまうので、DBAccessクラスを管理するクラスを作成したわけだ。
getDAOメソッドを利用してDBAccessサブクラスのインスタンスを取得する。インスタンスは初めて作るときのみ生成し、それ以降は使いまわす。使う側は何も考えずに、getDAOメソッドで必要なものを呼びだすだけで、最適な処理を行える。
class DuelDBObjectManager{
function DBObjectManager()
{
$_userDBO = NULL;
$_waitingDBO = NULL;
$_duelDBO = NULL;
}
function getDAO($dao_name)
{
switch ($dao_name){
case USER_DAO:
return $this->_getUserDAO();
case WAITING_DAO:
return $this->_getWaitingDAO();
case DUEL_DAO:
return $this->_getDuelDAO();
}
return NULL;
}
//略
function _getDuelDAO()
{
if($this->_duelDAO == NULL){
$this->_duelDAO = new DuelDBA();
}
return $dbm;
}
}
| |
今回解説したサンプルアプリは、http://www.apcon.jp/itmedia2004/07/download.htmから、直接ダウンロードして試すことができる(ドコモ端末のみ)。また、ソースはこちらからダウンロードが可能だ。
これまで、2回に渡ってネットワーク対戦アプリのサーバ側(加えてアプリの通信部分)の解説を行ってきた。ここまでくると、ネットワーク対戦アプリに必要なパーツは一通り揃ったといってよいだろう。しかし、まだまだ基本的なところしか用意されていない。これでは目の肥えたユーザーは満足してくれないかもしれない。次回はこのアプリをさらによいもの、面白いものにするため、どういう改善方法があるかという点について考察する。
筆者紹介──澤橋辰典・武上将樹
ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。
澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。
武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。
|
|
Copyright © ITmedia, Inc. All Rights Reserved.