-
> Игорь Шевченко © (17.01.09 23:44) [177]
Да, если я предполагаю, что такая ситуация будет вечно. В противном случае, я могу изначально написать "полуграмотно".
На мой взгляд, все-таки грамотность решения во многом определяется ТЗ и стоимостью. Грамотностью разработчика, конечно, тоже :)
-
oxffff © (17.01.09 23:48) [179]
> Дык весь вопрос в том, что информацию пользователю попадает > через логирование, которое в данном случае внешнее. Как > быть если оно киркнулось, как сообшить пользователю о сбое
Как сообщить пользователю о том, что компьютер, на котором выполнялась программа, перезагрузился из-за ошибки другого приложения ? Ответив на этот вопрос, ты получишь механизм оповещения о неисправном логгере
-
KilkennyCat © (17.01.09 23:50) [180]
> Да, если я предполагаю, что такая ситуация будет вечно
Я не совсем понял, какая ситуация имеется в виду ? Ситуация, что надо игнорировать ошибки о черных ящиков ?
Я о другом - народ настолько увлекся исключительными ситуациями, что забыл об их изначальном предназначении - информировать о том, что произошла ситуация, не предусмотренная алгоритмом. Поэтому считается, что можно втихую проигнорировать АБСОЛЮТНО ЛЮБУЮ ситуацию пустым блоком except end и продолжать, как ни в чем не бывало.
-
> Игорь Шевченко © (17.01.09 23:43) [176] > oxffff © (17.01.09 23:31) [173] > > > > Теперь вопрос вам, как вы не зная реализации логера и > его > > природу(DLL) можете обработать его ошибки? > > И привидите грамотное с вашей точки зрения решение, сохранив > > > условие задачи. > > > Для меня недостаточно условий для приведения решения задачи, > но в твоем коде я вижу два недостатка:
Не забываем добавлять IMHO.
> > первый: если в методе task.execute возникнет исключение, > то информация будет только о факте ошибки вообще.
Этого может вполне достаточно. Однако пример был упрощен. Можно расширить контракт, сохранив обобщенный подход. try try Task.Start; except try ErrorInfo:=Task.GetlastError; except ErrorInfo:='Task Unknown Error'; end; Log.Inform('ErrorInfo); end; except end
> второй: если в методе task.execute возникнет исключение > и в методе ExternalLogger.Inform возникнет исключение, то > информации даже о факте ошибки не будет.
Тут вы IMHO лукавите ? Если при исключении в вашем логере будет неустранимый сбой, как пользователь об этом узнает? Где здесь разница между внутренним и внешним логером?
Да и оборочиваете ли вы вызов логгера в try?
-
> Игорь Шевченко © (17.01.09 23:53) [181] > oxffff © (17.01.09 23:48) [179] > > > > Дык весь вопрос в том, что информацию пользователю попадает > > > через логирование, которое в данном случае внешнее. Как > > > быть если оно киркнулось, как сообшить пользователю о > сбое > > > Как сообщить пользователю о том, что компьютер, на котором > выполнялась программа, перезагрузился из-за ошибки другого > приложения ? Ответив на этот вопрос, ты получишь механизм > оповещения о неисправном логгере
Дык здесь и есть камень приткновения. Вы утверждаете что решение неграмотное. Неграмотность как я понимаю с вашего IMHO состоит в том, не обрабатывается ситуация сбоя логера. Дык, если внутренний известный логгер вам сбойнул, у вас есть возможность обработать его исключения, коды, ошибок. И возможно даже его восстановить. Если его восстановить нельзя (либо проглотить ошибку, либо с треском). Но тогда данная ситуация ничем не отличается о обобщенного решения. И я могу также сказать, что подобное ваше решение на внутреннем логере кривое, поскольку пользователь не узнает о сбое. Не так ли?
Честно говоря я надеюсь что вы аргументируете свое высказывание "кривое", поскольку другие участиники сделать этого не смогли.
Но!!! Сохранив условия задачи о неизвестном логере, сделать вы это не сможете. Поскольку сами подтвердили в [181].
Я без всяких обид приму Ваше, что с "кривым" я погорячился. Лично у меня вызывают глубокую симпатию грамотные люди, которые способды аргументировать свое точку зрения аргументами, а не общими фразами. Вы именно такой собеседник.
P.S. Повторю свою позицию для тех кто не видел
Ошибки для меня существуют. И поверь, что я не отстаиваю точку зрения что except end должен быть пустым всегда. Более того я и пишу, как все мои оппоненты, либо информативные коды возвратов, либо дерево классов исключений с проверкой в except end.
Я отстаиваю точку зрения, что может быть и except end пустым (а это между прочим тема начальной беседы) и привел контректный пример.
-
oxffff © (17.01.09 23:59) [183]
> Не забываем добавлять IMHO.
Нет, без всякого IMHO - это вполне объективные недостатки, либо, как я уже говорил, исходных данных для построения алгоритма недостаточно.
Я в данном случае согласен с Сергеем Масловым - не удалось записать в журнал, надо вылетать с треском и информировать пользователя тем же самым способом, что и при перезапуске компьютера из-за ошибки другого приложения.
-
to Игорь Шевченко © (18.01.09 00:26) [185]: >Я в данном случае согласен с Сергеем Масловым - не удалось записать в >журнал, надо вылетать с треском и информировать пользователя тем же >самым способом, что и при перезапуске компьютера из-за ошибки другого >приложения. Я бы попробовал вместо вылета для начала в системный журнал начать писать, он достаточно надежен. И вот если и этим тоже облом, то тогда уже точно хана.
-
> Игорь Шевченко © (18.01.09 00:26) [185] > oxffff © (17.01.09 23:59) [183] > > > > Не забываем добавлять IMHO. > > > Нет, без всякого IMHO - это вполне объективные недостатки, > либо, как я уже говорил, исходных данных для построения > алгоритма недостаточно.
Подождите вы сказали, именно о неграмотном решении. Значит вы знаете как грамотно разрешить ситуацию, которая в моей реализации упрощенного обобщенного способа не разрешается. Тогда я жду, как вы разрешите ситуацию с информированием пользователя через логер информацию о сбое самого логера.
Есть принципиальная разница.
Между вашими словами, что я привел неграмотное решение(т.е фактически указав, что я не профессионал, но пока не аргументировав контрпримером), и тем, что не существует способа решить эту задача при данных условиях(конкретно неизвестный логер), наделив пользователя 100% гарантией уведомления о всех ошибках, есть огромная разница. Т.е. по факту вы здесь не правы.
Либо признайте, что погорячились, либо привидите пример.
А то знаете ли хорошего человека просто так обозвали. > > Я в данном случае согласен с Сергеем Масловым - не удалось > записать в журнал, надо вылетать с треском и информировать > пользователя тем же самым способом, что и при перезапуске > компьютера из-за ошибки другого приложения.
А почему должны страдать другие задачи? Если есть возможность их исполнять. Или вы всех неустранимых ошибках логера, который выполняет для большинства задач второстепенную работу(естественно это не СУБД), рушите все приложение.
-
vuk © (18.01.09 00:37) [186]
> Я бы попробовал вместо вылета для начала в системный журнал > начать писать, он достаточно надежен. И вот если и этим > тоже облом, то тогда уже точно хана.
Собственно, мы так и делаем
oxffff © (18.01.09 00:41) [187]
"Для меня недостаточно условий для приведения решения задачи, но в твоем коде я вижу два недостатка:" (с) пост [176] Далее эти недостатки подробно разобраны по приведенному примеру кода.
-
> Игорь Шевченко © (18.01.09 00:59) [188] > oxffff © (18.01.09 00:41) [187] > > "Для меня недостаточно условий для приведения решения задачи, > но в твоем коде я вижу два недостатка:" (с) пост [176] > Далее эти недостатки подробно разобраны по приведенному > примеру кода.
Я честно говоря ожидал, что вы мудрее по жизни. А вы до последнего не хотите признавать, что погорячились. Вы же прекрасно понимаете, то что вы указали в [176] является постановкой и следствием задачи и никак не связно с моим решением. Мне жаль, что вы как человек не можете этого признать. :(
-
oxffff © (18.01.09 01:05) [189]
> Я честно говоря ожидал, что вы мудрее по жизни.
Я сожалею, что обманул твои ожидания. На этой ноте, я полагаю, дискуссию можно завершить
-
> Игорь Шевченко © (18.01.09 01:13) [190]
Игорь, как раз в [190] ты и проявил мудрость по жизни. :о)
-
> Игорь Шевченко © (18.01.09 01:13) [190] > oxffff © (18.01.09 01:05) [189] > > > > Я честно говоря ожидал, что вы мудрее по жизни. > > > Я сожалею, что обманул твои ожидания. На этой ноте, я полагаю, > дискуссию можно завершить
Теперь, тогда нет. Я буду добиваться от вас грамотного решения.
Итак к делу.
Есть
ITask=interface procedure execute; end;
ILogger=interface procedure inform(const Message:string); end;
Постановка задачи:
Есть набор заданий. Задание из себя представляет контракт ITask. Есть логгер внешний Логгер из себя представляет контракт ILogger.
Необходимо произвести запуск всех заданий, в случае возникновения исключения при выполнении задания, информировать о провале задания через логгер. Методы логгера также генерируют исключения в случае провала. Необходимо обеспечить пункты из [176]. Все исключения генерируемые ITask,ILogger - есть экземпляры EExtrernalException.
-
> Юрий Зотов © (18.01.09 01:28) [191] > > Игорь Шевченко © (18.01.09 01:13) [190] > > Игорь, как раз в [190] ты и проявил мудрость по жизни. > :о)
Да и вы туда же, смотрю задел я вас тогда замечанием о вашей реализацией синглетона. Шайка прям. Все за друг друга. Вась. Вась. Все отличились и А.П. тоже как получил от меня замечание. Но тоже не признал.
Может тогда решите совместно грамотно [192].
-
> oxffff © (18.01.09 01:28) [192]
Обязательным требованием является то, что пользователь может выдеть только тот результат, который отослан ему через ILogger. Искомое приложение запускается за отдельно стоящей машине, без GUI. Любое логирование или информирование должно происходить только через ILogger.
-
> oxffff © (18.01.09 01:32) [193]
Нет, я тоже проявлю мудрость по жизни. Существует категория людей, спорить с которыми не нужно.
LOL
-
> > oxffff © > > Игорь Шевченко © > Теперь, тогда нет. > Я буду добиваться от вас грамотного решения.
Я думаю теперь в противном случае вы либо приводите грамотное решение с учетом [176],[192],[194]. Либо признаете, что погорячились, либо подтвердите свои слова грамотным решением.
-
> Юрий Зотов © (18.01.09 01:42) [195]
Никто не говорит о споре с кем либо. Пожалуйста есть утвреждение, которое нужно подтвердить, либо отказаться. Либо номер № 3, сделать как вы. :) Ну что я могу сделать, это ваш выбор.
Я давном случае, я хочу отстоять свое право оставаться профессионалом(и возможно сложившийся авторитет для кого-то. А это знаете ли немало.) Не больше и не меньше. Вас уличить у меня цели нет.
-
> Юрий Зотов © (18.01.09 01:42) [195] > > oxffff © (18.01.09 01:32) [193] > > Нет, я тоже проявлю мудрость по жизни. Существует категория > людей, спорить с которыми не нужно.
Но тем не менее в своей статье упомянули возможность изменить ваше решение чуть его сократив, тихо умолчав кто его вам дал. :) Эх, Юрий, Юрий.
-
> oxffff © (18.01.09 01:58) [198]
Юрий Зотов © Помните про
if _Singleton = nil then //Можно и без проверки
|