使用CodeIgniter Model作为对象管理器/工厂

时间:2012-11-08 14:14:22

标签: php model-view-controller codeigniter

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

我想使用CodeIgniter Model类来处理对象的基本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设计规则吗?如果是这样,有人可以推荐我另一种方法解决我的问题吗?

2 个答案:

答案 0 :(得分:4)

如果您想构建适当的MVC,最好的方法是尽可能从Codeigniter获取。 Codeigniter是为PHP4编写的框架,现在它没有得到任何更新,我说的是框架设计,而不是一些库更新。

如果您查看Codeigniter源代码并查看基本模型的作用,它只需要从模型获取请求并使用magic _set和_get方法将其传递回控制器。因此,Codeigniter并不真正了解您的模型或控制器之间的差异。而且你们每个人都写这个,一切都是在超级超级全球物体中处理的。

从外面看起来你可能看起来像是在使用MVC,但事实并非如此。 看一下Zend2,Symfony2 ......在那里你可以真正构建你的模型。

答案 1 :(得分:3)

您目前拥有的是data mapper模式的奇怪解释(不要与CI的同名ORM相混淆,而是使用active record模式)。

这个想法是将域逻辑与存储抽象的交互分开。有关简化的代码示例,您可以阅读this post

只有主要问题,即我的工具,是你的映射器还包含用于创建实例的逻辑。因此,它还获得了工厂的特征(或者,builder ..取决于您的特定用例)。这会违反single responsibility principle

但这不符合CI的设计规则。因为它没有。