假设我有一个User对象用于使用ORM执行CRUD操作:
//Create a new User
$user = new User();
$user->name = "John Smith";
$user->age = 30;
$user->email = 'john@smith.com;
$user->save();
Read
,Update
和Delete
也可以使用类似的操作。
但是这些案件呢:
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
的班级来处理这些操作?
答案 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操作的用户 - 具体取决于它们是否是特定于表的。