ORM中的对象是否应包含CRUD以外的操作?

时间:2011-11-17 08:17:00

标签: php model-view-controller orm model

假设我有一个User对象用于使用ORM执行CRUD操作:

//Create a new User
$user = new User();
$user->name = "John Smith";
$user->age = 30;
$user->email = 'john@smith.com;
$user->save();

ReadUpdateDelete也可以使用类似的操作。

但是这些案件呢:

  • deleteAllUsers() //delete all users
  • getAllUsers() //get all users
  • promoteUser() //change the user's 'rank' (not permissions) within a website
  • addReputationPoints() //give the user x amount of reputation points

这些类型的操作会进入User类吗?如果没有,他们应该去哪里?我是否应该有一个名为UserManager的班级来处理这些操作?

3 个答案:

答案 0 :(得分:1)

通常,User类会扩展一个提供标准CRUD接口的ORM类。您谈到的其他功能非常适合User类本身。

制作“胖模型”和精简控制器总是好的做法,即将所有与数据操作直接相关的逻辑放在模型中,并且只将控制器中的“总体”逻辑放在一起。

参见例如这里有更多信息http://weblog.jamisbuck.org/2006/10/18/skinny-controller-fat-model

答案 1 :(得分:0)

在我最喜欢的框架(Kohana)中,我们有:

ORM::factory('user')->where(<whatever condition required>)->find_all();

和相应的delete()(替换上面的find_all())。你在写自己的ORM库吗?如果是,那么您可以将处理多个记录的操作作为类方法而不是实例方法。然而,这取决于你的设计。例如,Kohana仍然使它成为实例方法。

答案 2 :(得分:0)

这取决于您如何构建ORM解决方案。

我的方法是将集体行动(一次在多个记录上制作)包含在一些代表例如的类中。数据库表存储用户或负责基本ORM操作的用户 - 具体取决于它们是否是特定于表的。