Это не ужасно в и себя, но нужно действительно следить за вложением.
приемлемый вариант использования как таков:
я - компонент низкого выхода, который может встретиться со многими различными ошибками однако, мой потребитель только интересуется определенным типом исключения. Поэтому я могу сделать это:
catch(IOException ex)
{
throw new PlatformException("some additional context", ex);
}
Теперь это позволяет потребителю делать:
try
{
component.TryThing();
}
catch(PlatformException ex)
{
// handle error
}
Да, я знаю, что некоторые люди скажут, но потребитель должен поймать IOException, но это зависит от того, насколько абстрактный код потребления на самом деле. Что, если Impl сохраняет на диск что-то и потребителя, не имеет никакой допустимой причины думать, что их операция коснется диска? В таком сценарии не имело бы никакого смысла помещать эту обработку исключений в код потребления.
то, Чего мы обычно стараемся избегать при помощи этого шаблона, помещает "всеобъемлющий" обработчик исключений в код бизнес-логики, потому что мы хотим узнать все возможные типы исключений, поскольку они могли бы привести к более фундаментальной проблеме, которая должна быть исследована. Если мы не ловим, это пузырится, поражает "лучший лучший" обработчик уровней, и должен останавливать приложение от движения дальше. Это означает, что клиент будет отчет, что исключение и Вы получите шанс изучить его. Это важно, когда Вы пытаетесь создать устойчивое программное обеспечение. Необходимо найти все эти ошибочные случаи и написать определенный код для обработки их.
то, Что не очень симпатично, является вложением они чрезмерная сумма, и это - проблема, которую необходимо решить с этим кодом.
, Поскольку другой плакат указал, что исключения для довольно исключительного поведения, но не берут это слишком далеко. В основном код должен выразить "нормальную" операцию, и исключения должны решить потенциальные проблемы, с которыми можно столкнуться.
С точки зрения исключений производительности прекрасны, Вы получите ужасные результаты, если Вы тест перфекта с отладчиком к встроенному устройству, но в выпуске без отладчика они на самом деле довольно быстры.
главное люди забывают, когда обсуждение выполнения исключений состоит в том, что в ошибочных случаях все замедляется так или иначе, потому что пользователь встретился с проблемой. Мы действительно заботимся о скорости, когда сеть снижается, и пользователь не может сохранить их работу? Я очень сомневаюсь относительно возвращения сообщения об ошибке пользователю некоторые, более быстрый мс будет иметь значение.
основная инструкция для запоминания, когда обсуждение исключений состоит в том, что Исключения не должны происходить в нормальном потоке приложения (нормальное значение никакие ошибки). Все остальное происходит от того оператора.
В точном примере, который Вы даете, я не уверен все же. Мне кажется, что никакая выгода действительно не получена от обертывания, что, кажется, универсальное tcl исключение в другом универсальном звучании tcl исключение. Если что-либо, что я предложил бы разыскать исходного создателя кода и изучить, существует ли какая-то конкретная логика позади его взглядов. Возможности состоят в том, хотя это Вы могли просто уничтожить выгоду.
, если вам нужны данные за полный 25-й день, исключая все 26, вам нужно удалить первую секунду из 26:
where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26'
или
where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second
Обновление - A небольшая точность: в Oracle тип данных DATE
используется как для типов «Дата» со временем, так и без него. Если вы имеете дело с датами без времени, оно обычно сохраняется с отрезком времени 00:00, что означает полночь. Из-за этого первый между ( my_date между '2009-08-25' и '2009-08-26'
) потенциально выберет два полных дня.
Удалив первую секунду из 26 , убедитесь, что случайно не выберете строки из 26.
Чтобы получить все в период с 25 августа с 12:00:01 до 23:59:59 включительно, попробуйте следующее:
Where myDate Between to_Date('yyyymmddhh24miss', '20090825000001')
And to_Date('yyyymmddhh24miss', '20090825235959')
(Почему вы исключаете полночь 25-го? ? Эта первая секунда (00:00:00) также является частью 25-го ...)
Чтобы получить все до 25 августа, попробуйте следующее:
Where myDate < to_Date('yyyymmdd', '20090825')
SELECT *
FROM TABLE
WHERE myDate BETWEEN myDate ('08/25/2009', 'MM/DD/YYYY')
AND myDate ('08/26/2009', 'MM/DD/YYYY')