Вариантов реализации множество, но если по простому, что можно поступить так:
Создать одноименные методы в зависимости от ожидаемых типов, которые может вернуть $message->getType();
И собственно их и вызывать ))
Так вы избавитесь от кучи if и код каждой реализации разместите в свои методы.
Псевдокод:
public function resolve()
{
// ....
$type = $message->getType();
// Если такого метода не существует, то можно бросить Исключение или еще как-то обработать ошибку
// А можно вообще ничего не проверять, а сделать обработку в __call(). Вариантов тоже много
if (!method_exists($this, $type)) {
throw new Exception(...);
}
// Вызвать подходящий метод
return $this->$type(); //либо call_user_func...()
}
protected function text()
{
//code
}
protected function poll()
{
//code
}
protected function image()
{
//code
}
По примерно такой же схеме можно использовать отдельные классы, сервисы и т.п.