Ваш класс очень похож на объект бизнес-логики (domain entity).
Предпочтительно использовать при создании объекта и установки значений конструктор (entity всегда должна быть валидной) и постараться избавиться от внедрения зависимости через конструктор, например так:
public function updatePassword($plainPassword, PasswordEncoderInterface $encoder) {
$this->password = $this->encoder->encode($plainPassword);
}
Если у нас множество вариантов создания объекта, удобно использовать именованные конструкторы, такого вида:
public static function create($userName, $email) {
$user = new self();
$user->username = $username;
// ...
return $user;
}
public static function createFromMyVariant($uid) {
$user = new self();
// ...
return $user;
}