2010-11-10 152 views
0

我正在用PHP写这篇文章,但一般来说,用户(注册?)类具有什么方法和属性?我知道我可以使用PEAR中的MDB2进行数据库抽象,我能想到的一个功能是确保用户名是有效的。用户注册类

$user->validateUserName($username, $regex); 

任何人都可以想到更多?

谢谢。

编辑

用户名验证是一类自身的权利(Validator类或某事)呢?

+0

我想,那是的。你应该有一个单独的类与验证方法。你也应该清楚地描述,你的问题是什么,而不是用“(注册?)”来支持人们。坚持标题。 – Eugene 2010-11-10 15:18:19

回答

0

不应该有这样一个班。注册是一个接收数据,验证数据并最终在验证成功时处理验证数据的整个过程。换句话说,注册是使用某个对象来解决给定问题的那部分代码。

您需要什么?

  1. 表示单个用户的对象。
  2. 对象需要User对象并将其保存。
  3. 一些验证机制(它将使用至少几个对象)。

让我们来设计一个接口。我们将如何使用我们要编写的代码?

try { 
    $validator = new Validator($_POST); 
    $validator->addRules(array(
     'username' => new LengthValidator(array('min' => 3, 'max' => 15)), 
     'password' => array(
      new LengthValidator(array('min' => 6)) 
      new RegexpValidator(array('pattern' => '#...#')) 
     ), 
     'email' => array(
      new EmailValidator(), 
      new UniqueValidator(....) 
     ) 
    )); 

    $data = $validator->validate(); 

    $userService = new UserService($databaseHandler, $someOtherArguments); 

    $user = new User(); 
    $user->setUsername($data['username']); 
    $user->setPassword($data['password']); 
    $user->setEmail($data['email']); 
    $user->setFirstname($data['firstname']); 
    $user->setLastname($data['lastname']); 

    $userService->save($user); 
} catch (ValidationException $ve) { 
    // validation failed 
} 

这当然只是一个例子 - 它可以完全不同的方式设计。

+0

它应该有不同的设计。如果你使用这样的逻辑,那么你应该有一些主要的类和其他驱动程序。像在Zend一样。如果这些类有静态方法,它们看起来会更好。 – Eugene 2010-11-10 15:30:01

+0

请记住,在编写答案时,我一直在发明(不确定这是否正确)。 *应该有一些主要类和其他作为驱动程序*这适用于什么?验证/用户?诅咒可能是 - 这只是一个例子。 *如果这些类有静态方法,这些类看起来会更好。*在这个代码中应该使用何种静态方法? – Crozin 2010-11-10 19:39:18

+0

我不会同意错误处理程序:例外情况是出现特殊错误。无效的电子邮件格式是预期的错误(大部分时间取决于软件目标)。 – Antoine 2011-05-29 19:02:58

1

那么,你应该检查是否

  • 用户名已在使用
  • 密码足够强大
  • 用户的邮件地址是有效的

您还需要方法来

  • 创建一个新帐户
  • 更改用户资料
  • 删除现有帐户?
  • 允许用户在所有恢复遗忘查询密码
+0

Downvote:OOP的基础:[单一责任原则](http://en.wikipedia.org/wiki/Single_responsibility_principle) – Crozin 2010-11-10 15:07:53

+0

最后一次提出建议是不正确的。你忘了,这不是用户管理类。只用于注册。你可能想看看ZF。 – Eugene 2010-11-10 15:08:46

+0

此课程仅负责:管理用户数据(包括添加,编辑和删除用户) – Tokk 2010-11-10 15:09:54

0

ValidForm,它是一个很好的类,可以处理您的表单,无论是客户端/服务器端。但是,没有MySQL通过表单传递。