1

假设我有一个用户模型。我是将方法放在模型本身上,还是作为模板,以便我可以从用户表对象访问它?

换句话说,哪个更可取:

$u=new User();
$u->register($username, $password, $email);

或者

$userTable = Doctrine::getTable('User');
$userTable->register($username, $password, $email);

我的直觉是第二个,因为它在逻辑上更有意义,但是密码更改、登录等事情呢?我真的应该把它们放在用户模型上,而我把注册之类的东西放在用户表对象上吗?

4

2 回答 2

2

一般来说,如果事情与用户的特定实例相关,即:我或你,它们属于用户类。如果它们与一组用户相关,或者我们还没有用户(即:从数据库加载它们),那么它们属于 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 等价物以及它的 Object 等价物中包括一个 save 方法,你的注册有点类似于这个。所以肯定有人很快就会和对方争论!

要回答其他问题,我认为:

密码更改绝对属于用户 - 您正在更改用户的密码,它只是更改一个字段。

登录应该在表类中 - 它是检索的特殊情况。

于 2009-08-03T18:26:44.633 回答
2

这可能不是您问题的完整答案,但是如果Matthew Weier o'phinney 几天前发布的Play-Doh:建模您的对象会议,您可能会对幻灯片感兴趣;那里包含可以让您思考模型的好东西;-)

(他们让我思考......但我仍然无法对你的问题给出明确的答案:我会说“这取决于”......但不确定是什么^^)

可能,在大型应用程序的情况下,我会多使用一层:

  • 模型,用于访问数据
  • “服务”,操纵它;能够做的比我在模型中所做的要多......并且在控制器中没有它,它不属于它
  • 当然,还有控制器和视图

但是你永远不会让每个人都同意......所以我会说选择一种方式,并确保团队中的每个人都为整个项目这样做:没有什么比在一个项目/应用程序中混合太多不同的方式更糟糕的了!

于 2009-08-03T18:30:04.877 回答