在域驱动设计中(在 MVC 框架中)如何处理用户 session ?
我有一个User
域对象、一个UserRepository
和一个UserService
。
我的 UserService
类中有这个方法可以让用户登录。
public function login($email, $password, $remember = false)
{
$user = $this->userRepo->findByEmail($email);
if ($user && $user->getPassword() === $password) {
return $user;
}
return false;
}
如何让他们在 session 中保持登录状态?
我如何根据 session 用户 ID 自动加载用户?
谁能给我一个代码示例,说明我如何在 DDD 的应用程序中维持用户?
最佳答案
从 DDD 的角度来看,管理 session 是一组独特的行为,因此值得专门的服务。所以创建这样一个服务。
您可以将该服务作为依赖项传递给您的 UserService
,这样 UserService
就可以使用 session 管理器来存储身份验证信息。
更好的是,身份验证的概念也可以被视为一组不同的行为,因此也可以为此创建一个服务。将您的 UserService
和 session 管理器作为依赖项传递给此身份验证服务。 (因此 session 管理器不再是 UserService
的依赖项。)
但即使身份验证也可以分解为几个不同的部分,这取决于您想要走多远。
很遗憾,我无法向您展示任何代码,因为这在很大程度上取决于您要执行的身份验证类型(HTTP Basic、表单登录、OAuth 等)、您想要实现的抽象级别以及您的个人喜好。
但是如果你想看看一个复杂的系统是什么样的,看看 Symfony 2 的安全组件,here in the documentation和 here on github .
如果你考虑使用这个组件,你可以看看如何Silex implements it ( github ) 以了解如何使用它。
旁注
DDD 不仅仅是以某种方式编写代码。如果你想学习 DDD,我建议你阅读 Domain-Driven Design: Tackling Complexity in the Heart of Software (蓝皮书),Implementing Domain-Driven Design (红皮书),或者您可以从 Domain Driven Design Quickly 开始可供下载。
关于php - 如何在领域驱动设计中处理用户 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472057/