Доброго дня.
Вопрос касается чистоты кода и стройности архитектуры. Не секрет, что предикаты - функции, которые должны возвращать булево значение, отвечая на какой-либо вопрос (is directory exists?). Поскольку я год назад начал плотно угорать по исключениям (ибо они рулят), ныне я редко возвращаю false или null в случаях, когда false или null должны вести за собой прекращение работы программы. Я продолжаю их возвращать, когда ситуация допустима, но когда это ошибка - всегда выбрасываю исключение.
Собственно, суть вопроса в том, что в ряде случаев удобно сунуть выброс исключения в предикат. Таким образом, он, в ряде случаев, будет возвращать только true или выбрасывать исключение. Так лучше не делать, верно? И как делать в таких случаях, если код, генерящий исключение, хочется инкапсулировать в функцию? Делать дополнительную функцию-обертку над предикатом?
Закончу вопрос примером.<?php
class CheckForNewPhoto
{
public function handle(Repositories\MosaicRepository $MosaicRepository)
{
if($this->isDirectoryNameCorrect()) {
// ранее исключение выбрасывалось тут, я считаю, это некрасиво
// do stuff
}
throw new Exceptions\UnexpectedError(
'Something wrong here'
);
}
/**
* Вот это - предикат. Я сделал так, чтобы избавить entry point,
* функцию handle, от ада выбросов исключений, когда проверяется много
* условий и выкидывается много исключений в одном методе.
* Когда один метод > одна проверка > строго связанные с ней исключения,
* это красиво.
*/
private function isDirectoryNameCorrect()
{
if(!config('mosaic.directory', null)) {
throw new Exceptions\InvalidSettingsException(
'Directory for mosaic photos is not setup properly'
);
}
return true;
}
}
Заранее спасибо.