Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизОпыт создания обработчиков событий Найти похожие ветки
← →
msgipss (2004-04-16 15:01) [0]Имеется какая то объектная модель, она содержит логику работы как в штатных ситуациях так и в не штатных. Мне хотелось бы фиксировать с разной степенью детализации исключительные ситуации (либо какие то сообщения) происходящие в каждом из классов (ну по сути в самой модели).
Как архитектурно это построить:
Во первых делаю всю логику класса на функциях которые возвращают результат работы, исходя из результата выполнения (возвращаемая константа) делаю то.то и то то..
Тут вопрос, где описывать константы результата выполнения и как связать с текстом сообщения. (ну типа того, функция фозвратила evt_tlb_init - это означает "какое то описание"), делается это для того чтобы лог вести на человеческом языке.
И как обрабатывать, создавать екземпляр какого класса обработчика в каждом из классов модели, либо все сообщения поднимать в верхний класс и там их обработывать (записывать в файл либо куда то пересылать, либо еще что то...)
Интересен опыт решения данного вопроса...
Буду признателен за любую инфомацию по этому вопросу.
← →
msgipss (2004-04-16 15:01) [0]Имеется какая то объектная модель, она содержит логику работы как в штатных ситуациях так и в не штатных. Мне хотелось бы фиксировать с разной степенью детализации исключительные ситуации (либо какие то сообщения) происходящие в каждом из классов (ну по сути в самой модели).
Как архитектурно это построить:
Во первых делаю всю логику класса на функциях которые возвращают результат работы, исходя из результата выполнения (возвращаемая константа) делаю то.то и то то..
Тут вопрос, где описывать константы результата выполнения и как связать с текстом сообщения. (ну типа того, функция фозвратила evt_tlb_init - это означает "какое то описание"), делается это для того чтобы лог вести на человеческом языке.
И как обрабатывать, создавать екземпляр какого класса обработчика в каждом из классов модели, либо все сообщения поднимать в верхний класс и там их обработывать (записывать в файл либо куда то пересылать, либо еще что то...)
Интересен опыт решения данного вопроса...
Буду признателен за любую инфомацию по этому вопросу.
← →
Семен Сорокин © (2004-04-16 15:05) [1]Application.OnException - для исключений
для общих можно что-то типа ф-ии Check() (как в BDE) - которая будет проверять результат, но а список сообщений хоть в ресурсах, хоть в ini - на выбор.
← →
Семен Сорокин © (2004-04-16 15:05) [1]Application.OnException - для исключений
для общих можно что-то типа ф-ии Check() (как в BDE) - которая будет проверять результат, но а список сообщений хоть в ресурсах, хоть в ini - на выбор.
← →
Mim1 (2004-04-16 15:48) [2]msgipss (16.04.04 15:01)
Мне кажется ваш подход не верен. То есть вам вообще придется отказаться при таком подходе от использования функций, так как все методы в вашей программе будут функциями возвращающими код ошибок.
Например
function getfilename(out filename:string):errorcode;
что не совсем красиво
вот к чему привел бы ваш пожход если бы borland пошел вашим путем
вместо
progressbar.position := strtoint(Edit1.text) + strtoint(Edit2.text);
{если произойдет ошибка то пользователь увидит сообщение об ошибке, progressbar.position не изменится}
придется делать такое
var i,j:integer;
begin
if strtoint(edit1.text,i) = errok then
begin
showmessage("Ну вы блин даете, введите число в edit1");
exit;
end;
if strtoint(edit2.text,j) = errok then
begin
showmessage("Ну вы блин даете, введите число в edit2");
exit;
end;
progressbar.position := i + j;
end;
Может задумаетесь еще раз об exception механищзме?
← →
Mim1 (2004-04-16 15:48) [2]msgipss (16.04.04 15:01)
Мне кажется ваш подход не верен. То есть вам вообще придется отказаться при таком подходе от использования функций, так как все методы в вашей программе будут функциями возвращающими код ошибок.
Например
function getfilename(out filename:string):errorcode;
что не совсем красиво
вот к чему привел бы ваш пожход если бы borland пошел вашим путем
вместо
progressbar.position := strtoint(Edit1.text) + strtoint(Edit2.text);
{если произойдет ошибка то пользователь увидит сообщение об ошибке, progressbar.position не изменится}
придется делать такое
var i,j:integer;
begin
if strtoint(edit1.text,i) = errok then
begin
showmessage("Ну вы блин даете, введите число в edit1");
exit;
end;
if strtoint(edit2.text,j) = errok then
begin
showmessage("Ну вы блин даете, введите число в edit2");
exit;
end;
progressbar.position := i + j;
end;
Может задумаетесь еще раз об exception механищзме?
← →
msgipss (2004-04-19 08:57) [3]Application.OnException - это конечно хорошо, но допустим различные программы будут подключать мой функционал, использование глобального обработчика тогда не получается.
Например делаю я какой то интерфейс к данным, который может использоваться различными программными средствами, поэтому обработку событий (исключительных ситуаций и т.д.) мне наверное нужно проводить на каждом уровне иерархии модели, поднимая выше только те сообщения которые необходимы для функционирования вышестоящих классов, а фиксировать нужно все события происходящие в модели.
Теперь по константам сообщений (применительно к одной модели), наверное они должны располагаться в одном модуле, а текстовую часть хранить где угодно.
Возможно я сильно усложняю, но хотелось бы применить единый подход (при разлиной степени детализации лог информации) по работе программных структур в различных ситуациях.
← →
msgipss (2004-04-19 08:57) [3]Application.OnException - это конечно хорошо, но допустим различные программы будут подключать мой функционал, использование глобального обработчика тогда не получается.
Например делаю я какой то интерфейс к данным, который может использоваться различными программными средствами, поэтому обработку событий (исключительных ситуаций и т.д.) мне наверное нужно проводить на каждом уровне иерархии модели, поднимая выше только те сообщения которые необходимы для функционирования вышестоящих классов, а фиксировать нужно все события происходящие в модели.
Теперь по константам сообщений (применительно к одной модели), наверное они должны располагаться в одном модуле, а текстовую часть хранить где угодно.
Возможно я сильно усложняю, но хотелось бы применить единый подход (при разлиной степени детализации лог информации) по работе программных структур в различных ситуациях.
← →
Anatoly Podgoretsky © (2004-04-19 09:00) [4]ООП, в части наследования и полиморфизма.
Сделай базовый класс с нужными виртуальными, абстрактными методами.
← →
Anatoly Podgoretsky © (2004-04-19 09:00) [4]ООП, в части наследования и полиморфизма.
Сделай базовый класс с нужными виртуальными, абстрактными методами.
← →
msgipss (2004-04-19 09:33) [5]Вообще хотелось посмотреть на опыт решения данного вопроса др.людьми, тема то достаточно общая при программировании задач различной сложности.
← →
msgipss (2004-04-19 09:33) [5]Вообще хотелось посмотреть на опыт решения данного вопроса др.людьми, тема то достаточно общая при программировании задач различной сложности.
← →
Erik © (2004-04-19 10:23) [6]Сделай Try except на любом уровне своей модели и радуйся. А для обработки ошибок сделай отдельный класс и вызывай его в случае exception. Незабудь также, что expeption могут давать нетолько твои функции. :)
← →
Erik © (2004-04-19 10:23) [6]Сделай Try except на любом уровне своей модели и радуйся. А для обработки ошибок сделай отдельный класс и вызывай его в случае exception. Незабудь также, что expeption могут давать нетолько твои функции. :)
← →
msgipss (2004-04-20 05:05) [7]хорошо, так и сделаю.... спасибо за ответы.
Тема закрыта.
← →
msgipss (2004-04-20 05:05) [7]хорошо, так и сделаю.... спасибо за ответы.
Тема закрыта.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c