Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.
Выявление ошибок в представленном коде
Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется проанализировать данный фрагмент PHP‑кода, обнаружить возможные дефекты и предложить варианты его улучшения. Особое внимание обратите на правильность внедрения зависимостей, обработку исключений и соблюдение принципов чистого кода.
class DbLogger
{
public function logError(string $message)
{
// ..
}
}
class EmailSender
{
private DbLogger $dbLogger;
public function __construct(DbLogger $dbLogger)
{
$this->dbLogger = $dbLogger;
}
public function sendEmail(): void
{
try {
// ...
} catch (SomeException $exception) {
$this->dbLogger->logError($exception->getMessage());
}
}
}
Ответ
Внедрение DbLogger через конструктор уже выполнено корректно. Основной риск — исключение проглатывается, и вызывающий код не узнаёт, что письмо не отправлено.
Можно зависеть от интерфейса логгера, чтобы менять реализацию и тестировать отправитель. После записи ошибки либо пробросьте исключение, либо верните явно типизированный результат согласно контракту. Продумайте отказ самого логгера, повторную отправку и идемпотентность. Не записывайте в журнал чувствительные данные письма; не нужно расширять catch до всех ошибок без определённой стратегии обработки.