상당히 복잡한 응용 프로그램 논리를 저장할 최적의 장소와 관련하여 질문이 있습니다.로그인 기능을위한 애플리케이션 로직을 어디에 배치해야합니까?
사용자가 사이트에 로그인 할 수있게하려고합니다. (확인 사용자 가 존재 확인하기 위해 인증 테이블 인증 테이블 저장소를 사용자의 이메일 해시를 봐
- 해시 : 로그인 과정은 다음 단계를 수반한다 암호화 된 이메일, 이메일 해시 266 및 암호 해시) 사용자가 발견되면
- 는, 다음의 유효성을 검사 암호
- 다시 생성 세션 ID
- 를 데이터베이스에 저장 새로운 세션
데이터 매퍼 패턴을 사용하여, 나는 따라서이 과정
/User/
- User.php
- UserMapper.php
/Auth/
- Auth.php
- AuthMapper.php
/Session/
- Session.php
- SessionMapper.php
같은 것을 보일 것의 사용자를 기록하는 기능에 관련된 다음과 같은 세 가지 모델이 있습니다
function login($email, $password)
{
$security = new \Lib\Security;
$authMapper = new \Models\Auth\AuthMapper($this->db);
$userMapper = new \Models\User\UserMapper($this->db);
$session = new \Models\Session\Session;
$sessionMapper = new \Models\Session\SessionMapper($this->db);
$email_hash = $security->simpleHash($email);
if (!$auth = $authMapper->fetchWhere('email_hash', $email_hash))
{
echo 'User doesnt exist';
return;
}
if (!$auth->verifyPassword($password))
{
echo 'Password not correct';
return;
}
$user = $userMapper->fetchById($auth->user_id);
$session->createUserSession($user);
$sessionMapper->save($session);
}
을 여기에 몇 가지 문제가 있습니다. 첫 번째는 의존성 주입이 없다는 것입니다. 두 번째는 로그인 기능을 제공하고자하는 모든 장소를 사용하는 번거로운 코드 덩어리입니다.
그렇다면이 논리는 어디에 있어야합니까? 컨트롤러에서? 사용자 도메인 개체에서? 인증 도메인 개체에서? 그것은 일종의 원형으로 보입니다 - 데이터 맵퍼의 전체적인 점은 도메인 객체가 다른 객체는 말할 것도없고 자체의 지속성도 다루지 않기 때문입니다 ... 이것은 사용자 또는 인증 서비스 계층에 배치되어야합니다./사용자/또는/Auth/모델?
나는 이런 종류의 일에 대한 모범 사례에 대해 약간 분실했다.
또한 학습 목적으로 사용하니 Symfony와 같은 것을 사용하고 싶지는 않습니다.
다운 투표하면 왜 알려주십시오! 건배 –