-1

我目前正在编写一个完整的应用程序。当然,最重要的功能之一是用户管理。我已经完全想到了这一点,但我仍然不确定一个主题。

用户类应该包含什么,不应该包含什么?

我至少将 us​​er_id 和用户名保存在 User 对象中似乎是合乎逻辑的。由于,我会经常需要这个。但是诸如电子邮件、地址、真实姓名等信息呢?您是否也将这些信息放在 User 对象中?

我正在考虑这样做:我将 user_id 和用户名保存在对象本身中,所以我可以使用方法 getUserId() 和 getUsername() 访问它。这个方法,令人惊讶的是,将返回 $this->userId 和 $this->username。

关于其他信息,例如地址,我正在考虑添加方法。但我不会将此信息存储在实例变量中。就像 getAddress() 方法会调用 UserMapper 一样,我还将在其中创建一个方法来获取地址。

<?php
//UserMapper
public function getAdress() {
 $this->database->query('SELECT adress FROM users WHERE user_id = ?', array($this->getUserId));
 return $database('adress');
}

//User
public function getAdress() {
 return $this->userMapper->getAdress();
}
?>

或者我应该为这些信息创建另一个类?

4

2 回答 2

0

一些想法...

您可能拥有系统用户,并且您可能拥有不同于任何用户的管理凭据。我倾向于避免使用“用户”作为此类名称,并且通常更喜欢“登录”和/或“凭据”之类的名称。

您可能有多种类型的凭据,...除了用户名/密码之外,您可能还具有 oauth、openid 等凭据。通常,“用户名”将是电子邮件地址。

可能已经有库可以处理您想做的事情。

我可能会将用户的联系信息与其登录凭据分开存储,但这取决于应用程序的类型。具体而言,它取决于任何给定的“用户”是否总是只有一个且只有一个物理地址。

一旦你有了某种登录类,我就会倾向于有某种权限类,将登录名加入他们有权查看/更新的对象。

顺便说一句,您拼写错误的地址。

于 2012-08-30T10:50:32.453 回答
0

区分用户和个人很重要。

一个人有姓名、地​​址、出生日期和其他关于他的事实。用户拥有凭据、秘密问题、系统权限等。

现在,问问自己用户和人之间的关系是什么。正如上面的布赖恩回答的那样,默认情况下将两者分成不同的类和表是一个好主意,因为这样会更容易。

这里有一些理由来打破这些。

  1. 用户可能会在其存在的整个过程中保持不变,而依附于用户的人可能不会。
  2. 在权限和角色的上下文中很少需要有关此人的信息,因此这是不必要的在您的用户类中浮动的额外数据。这个名单还在继续……

我通常将用户内容分解为以下类

   User (
        id
        login
        password
        password_expiredate
        enabled
        otherflags
        ) //(occasionally email, if it is used as login)

   Person (
        pid     // If it is not one to one between user and person
        user_id FK
        Name
        DOB
        Email 
        other relevant information
       )
   Address
       ( 
       person_pid
       type //home,work, etc
       Street
       City
       State
       Zip
       Country
       )
   Phone
      (
       person_pid
       type
       number
      )

至于创建类,一般来说,我不确定这是否是一种好习惯,但我允许用户包含一个人,而这个人又包含具有各自功能的 Address 和 Phone 类。

以我的经验,结构的规范化允许灵活开发将使用人和用户的业务规则。

此外,一个人不必是用户。

于 2012-08-30T13:54:30.193 回答