2

我目前正在设计一个使用 CodeIgniter 的游戏,但我不认为模型的单例方法是我想要处理数据库中与游戏相关的对象的方式。

我想使用 CodeIgniter 模型类来处理对象的基本 CRUD 操作,但将对象作为 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 回答