2

私は現在、CodeIgniter を使用するゲームを設計していますが、モデルに対するシングルトン アプローチは、DB でゲーム関連のオブジェクトを処理したい方法ではないと思います。

オブジェクトの基本的な CRUD 操作を処理するために CodeIgniter モデル クラスを使用したいのですが、オブジェクトを PHP クラスとして使用します。

例:

 $this->load->model('playermodel');
 $player = $this->playermodel->get($player_id); // Returns a Player object

 // Call modifying operations on the player (equip item, take damage etc.)

 $this->playermodel->save($player); // Commits updated Player back to DB

 $player2 = $this->playermodel->create(); // Basically calls new Player()

私は CodeIgniter にかなり慣れていませんが、このようなことは、あらゆる種類の CodeIgniter または MVC の設計規則に反しますか? もしそうなら、誰かが私の問題に対する別のアプローチを勧めてくれますか?

4

2 に答える 2

4

適切な MVC を構築したい場合は、Codeigniter から可能な限り取得することをお勧めします。Codeigniter は PHP4 用に作成されたフレームワークであり、かなり長い間更新されていません。ライブラリの更新ではなく、フレームワークの設計について話しているのです。

Codeigniter のソース コードを見て、ベース モデルが何をするかを見ると、モデルからリクエストを受け取って、魔法の _set および _get メソッドを使用してコントローラに戻すだけです。そのため、Codeigniter はモデルやコントローラーの違いを実際には認識していません。そして、これを書くたびに、すべてがメガスーパーウルトラグローバルオブジェクトで処理されます。

外部からは MVC を使用しているように見えますが、実際にはそうではありません。モデルを実際に構築できる Zend2、Symfony2 を見てください。

于 2012-11-08T17:15:36.390 に答える
3

あなたが現在持っているのは、データマッパーパターンの奇妙な解釈です(代わりにアクティブレコードパターンを実装する同じ名前のCIのORMと混同しないでください)。

アイデアは、ドメインロジックをストレージ抽象化との相互作用から分離することです。簡略化されたコード例については、この投稿を読むことができます。

唯一の大きな問題は、マッパーにインスタンスを作成するためのロジックも含まれていることです。したがって、ファクトリの特性も取得しました(または、ビルダーは特定のユースケースによって異なります)。これは単一責任の原則に違反します。

しかし、これはCIの設計規則に反するものではありません。ないから。

于 2012-11-08T16:22:24.980 に答える