0

我有一个基本的用户模型,可以满足一般用户的所有需求。我现在需要为用户创建几个不同的角色,每个角色都有大约 10-20 种其他角色无法使用的不同方法。

假设我必须加载通用 User 类来确定用户的角色......

由于将这么多不同的基于角色的方法打包到通用用户模型中(当它们不能被所有角色使用时)是低效和繁重的,所以只有当用户访问他们的基于角色的方法时,最好的方法是什么?需要他们吗?

以下是我折腾的一些想法:

  1. 每个角色有一个单独的服务类,并根据用户的角色将它们交给User类

  2. 简单地围绕用户类中的所有方法,只有当用户具有正确的角色时才允许访问每个方法。

  3. 完全重构并使基于角色的类继承自 User 类。

这些好主意中的任何一个,还是有更好的主意?

4

2 回答 2

3

为什么不将基于角色的类组合到 User 对象中呢?

$user = new User(/* pass role as an arg */);

// Internally:
// if ($user->getRole() instanceof AdminRole) or similar...
if ($user->isAdmin()) {
    // AdminRole::doSomethingAdminish()
    $user->getRole()->doSomethingAdminish();
}
于 2011-09-23T19:21:47.980 回答
2

看看工厂模式。本质上,您将实例化对象所需的数据传递给它,它会返回处于准备使用状态的正确对象。

也许像

class UserFactory
{
   public static function getUser($userId)
   {
      $user = new User($userId);
      switch ($user->getType()) {
         case 'admin' :
            return new AdminUser($user);
         case 'guest' :
            return new GuestUser($user);
         default :
            //handle 
      }
   }
}
于 2011-09-23T19:18:46.723 回答