Сделал 3 сервиса, 1 для переименований, смен статуса итд, 2 для контроля доступа, 3 для сброса пароля.
Но агрегат не хило так разбух.
Может можно как-то разделить на разные контексты?
Например, в контексте фронтенда мне нужны только анкетные данные, все остальное нужно только для админки.
Как лучше поступить?
Для наглядности:
Код: Выделить всё
<?php
namespace App\Domain\Staff\Entities\StaffMember;
class StaffMember implements AggregationRootInterface
{
use EventsTrait;
private $id;
private $email;
private $passwordHash;
private $name;
private $role;
private $statuses;
/** @var \ArrayObject|AuthenticationToken[] */
private $authenticationTokens;
private $creationTime;
public function __construct(
Id $id,
Email $email,
PasswordHash $passwordHash,
Name $name,
Role $role
)
{ ... }
public function getId(): Id { ... }
public function getEmail(): Email { ... }
public function getPasswordHash(): PasswordHash { ... }
public function getName(): Name { ... }
public function getRole(): Role { ... }
public function getCreationTime(): \DateTimeImmutable { ... }
/**
* @return Status[]
*/
public function getStatuses(): array { ... }
/**
* @return AuthenticationToken[]
*/
public function getAuthenticationTokens(): array { ... }
public function isActive(): bool { ... }
public function isArchived(): bool { ... }
public function rename(Name $name): void { ... }
public function changeEmail(Email $email): void { ... }
public function changeRole(Role $role): void { ... }
public function archive(\DateTimeImmutable $time): void { ... }
public function reinstate(\DateTimeImmutable $time): void { ... }
public function revokeAccess(string $token): void { ... }
public function authenticate(string $token): void { ... }
public function logout(string $token): void { ... }
public function login(AuthenticationToken $token): void { ... }
}