假设我有一个用户模型。我会将方法放在模型本身上,还是作为模板放置,以便我可以从用户表对象中访问它?
换句话说,更优选的是:
$u=new User();
$u->register($username, $password, $email);
或
$userTable = Doctrine::getTable('User');
$userTable->register($username, $password, $email);
我的直觉是第二个,因为它在逻辑上更有意义,但是密码更改,登录等等呢?我是否应该将这些内容放在User模型上,同时保留用户表对象上的注册内容?
答案 0 :(得分:2)
通常,如果事物与用户的特定实例相关,即:我或您,则它们属于User类。如果它们与一组用户有关,或者我们还没有用户(即:从数据库加载它们),那么它们属于Table类。
我会把你的例子作为:
class UserTable {
function register($username, $password, $email) {
$user = new User;
$user->username = $username;
$user->password = $password;
$user->email = $email;
$user->save():
}
}
人们会争论某些东西属于哪里,而储蓄就是其中之一!我知道Propel,它是另一个类似的PHP ORM,在它的Table等价物中包含一个save方法,以及它的Object等价物,你的注册与此类似。所以肯定有人会尽快争辩另一方!
在我看来,要回答其他问题:
密码更改属于用户,当然 - 您正在更改用户的密码,只是更改字段。
登录应该在表类中 - 它是一个特殊的检索案例。
答案 1 :(得分:2)
这可能不是你问题的完整答案,但如果几天前Matthew Weier o'phinney发表的Play-Doh: Modelling Your Objects会议,你可能会对幻灯片感兴趣;包含可以让你思考模型的好东西; - )
(他们让我思考..但我仍然无法对你的问题给出明确的答案:我会说“这取决于”......但不确定是什么^^)
可能在大型应用程序的情况下,我会再使用一层:
但是你永远不会让每个人都同意......所以我会说选择一种方式,并确保你团队中的每个人都为整个项目做到这一点:没有什么比在一个方面混合太多不同的方式更糟糕了项目/申请!