Ho modellato la mia applicazione utilizzando più oggetti di dominio "utente".
- Candidato
- Recruiter
- Amministratore
Ogni entità si estende da un AbstractUser
all'implementazione di UserInterface
.
interface UserInterface
{
public function getEmail();
public function setEmail($email);
public function getPassword();
public function setPassword($password);
}
Hanno tutti un loro servizio CandidateService
, AdminService
etc che implementa UserServiceInterface
interface UserServiceInterface
{
public function getUserByEmail();
}
Il mio problema sorge quando ho bisogno di recuperare un utente tramite il loro indirizzo e-mail (ad esempio PasswordResetService
). Non sono in grado di determinare quale servizio dovrei chiamare poiché l'e-mail potrebbe essere uno di questi. Sto anche utilizzando mongoDB, quindi non posso semplicemente eseguire una query nativa unendo le 'tabelle'.
Il mio attuale pensiero è che devo iniettare ogni servizio in PasswordResetService
e chiamare getUserByEmail()
su ciascuno di essi finché non ottengo l'utente desiderato.
class PasswordResetService
{
public function getUserByEmail($email)
{
$user = $this->userService->getUserByEmail($email);
if ($user) return $user;
$user = $this->recruiterService->getUserByEmail($email);
if ($user) return $user;
// etc ...
}
}
Da una prospettiva di progettazione, quanto sopra mi sembra un approccio inadeguato, come dovrei aggiungere un nuovo tipo di utente. Dovrei aggiornare anche il servizio di password.
C'è un modo migliore per raggiungere questo obiettivo?