Обновить
108
Кирилл Коншин@dfuse

Principal Software Developer

40
Подписчики
Отправить сообщение
Второй пример черезчур избыточен, нет?

try {
  try {
    $obj = $ad->getById();
  } catch (Adapter\Exception $e) {
    $obj = $ad->getByName();
  }
} catch (Adapter\Exception $e) {
  throw new ApplicationException('Все плохо', ApplicationException::NOT_FOUND, $e);
}

В принципе, если не найденный объект не является фатальной ошибкой, возврат null не так страшен, главное, чтоб не false, 0, -1 и всякие прочие вариации. Однако я считаю это плохим тоном — стоит пропустить хотя бы одну такую проверку на null в коде аля

Some some = Some.get();
if (some != null) {}

и приложение упадет с NPE. В случае коллекций надо возвращать пустую, чтобы итерироваться по ней можно было вообще без проверок и это не приводило к фатальным последствиям. В случае одного эл-та по ID, к примеру, нужно каждый раз крепко задумываться. В некоторых книгах вместо null рекомендуют возвращать «объект особого случая».
Вы как раз сформулировали основной косяк подхода.
Выше Вы это уже писали, кстати. Отчего тут-то по-другому?
«не перехватывайте Exception, которые не можете обработать» — не совсем. Перехватывайте, оборачивайте, и кидайте дальше.
Про типизацию — подразумевалось, что от метода не может приходить false или объект, а всегда только что-то определенное.
нормальный результат, если метод возвращает null или false, когда ничего не найдено

Не уверен. Попытка найти что-то несуществующее, но очень нужное, к примеру, должна приводить к исключению, а не проверке типа (псевдокод):
x = sample_db_query(…)
if (x != false) … else …

Вообще я за типизированные ответы, если от метода ожидается коллекция — пусть вернется либо пустая, либо исключение, если пустой там быть не может. Если вернуться должен ровно один объект — либо он сам, либо исключение.
Киньте соответствующее исключение, какие проблемы. Не ловите все подряд в catch, ловите только то, что сможете обработать, остальное оборачивайте и кидайте наверх. Правильность параметров не при чем, если возникла некая ошибка в работе.

Буквально недавно была цепочка примерно такая цепочка, не могу найти: Ошибка записи в сокет (или базу) — Ошибка IO — Ошибка связи с сервером платежей — Ошибка платежа — Ошибка сохранения заказа и т.д., т.е. вы имеете семантичные ошибки, у которых у каждой известно, что ее спровоцировало, и чем глубже — тем конкретнее. Естественно, управляющий код верхнего уровня, поймавший исключение, про самые низкие типы исключений ничего знать не должен.
Это Ваше мнение. Ок.
Это была цитата, загуглите, если Вам она не известна. Кавычки я забыл, да.
Пример в студию. Имхо если такое приходится вытворять — это говорит о плохом дизайне в принципе.
… Не читал, но осуждаю!
Интересно, туда можно просто приехать и посетить конференцию, или надо для этого быть журналистом или проходить какие-то регистрации?
Это Ваше мнение. Пусть так.
А какой смысл это выкладывать в 2011-м? Тем паче, что проблемы кода гораздо серьезнее, чем мои мелкие придирки (читайте дискуссии выше).
Из придирок:

if ( !empty(load::$path[0]) ) — антипаттерн Magic Numbers, как минимум надо писать load::isIndex()
На кой Вам определять OS когда есть константы PATH_SEPARATOR и DIRECTORY_SEPARATOR?
Я бы сказал единственно верный и чистый
У нас просто нет IE6 в списке поддерживаемых ;)
Уже который год не применяю хаки вообще, как-то все само работает…
Сдается мне, что это из email подтверждения заказа, чтобы сразу из почты с авторизацией пройти в просмотр инфо.
А его можно развернуть и держать в развернутом состоянии? Несколько пунктов подряд чтобы выбрать больно много кликов надо.

Информация

В рейтинге
Не участвует
Откуда
San Francisco, California, США
Дата рождения
Зарегистрирован
Активность