Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Опыт создания обработчиков событий   Найти похожие ветки 

 
msgipss   (2004-04-16 15:01) [0]

Имеется какая то объектная модель, она содержит логику работы как в штатных ситуациях так и в не штатных. Мне хотелось бы фиксировать с разной степенью детализации исключительные ситуации (либо какие то сообщения) происходящие в каждом из классов (ну по сути в самой модели).
Как архитектурно это построить:
Во первых делаю всю логику класса на функциях которые возвращают результат работы, исходя из результата выполнения (возвращаемая константа) делаю то.то и то то..
Тут вопрос, где описывать константы результата выполнения и как связать с текстом сообщения. (ну типа того, функция фозвратила evt_tlb_init - это означает "какое то описание"), делается это для того чтобы лог вести на человеческом языке.
И как обрабатывать, создавать екземпляр какого класса обработчика в каждом из классов модели, либо все сообщения поднимать в верхний класс и там их обработывать (записывать в файл либо куда то пересылать, либо еще что то...)

Интересен опыт решения данного вопроса...

Буду признателен за любую инфомацию по этому вопросу.


 
Семен Сорокин ©   (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 механищзме?


 
msgipss   (2004-04-19 08:57) [3]

Application.OnException - это конечно хорошо, но допустим различные программы будут подключать мой функционал, использование глобального обработчика тогда не получается.
Например делаю я какой то интерфейс к данным, который может использоваться различными программными средствами, поэтому обработку событий (исключительных ситуаций и т.д.) мне наверное нужно проводить на каждом уровне иерархии модели, поднимая выше только те сообщения которые необходимы для функционирования вышестоящих классов, а фиксировать нужно все события происходящие в модели.
Теперь по константам сообщений (применительно к одной модели), наверное они должны располагаться в одном модуле, а текстовую часть хранить где угодно.
Возможно я сильно усложняю, но хотелось бы применить единый подход (при разлиной степени детализации лог информации) по работе программных структур в различных ситуациях.


 
Anatoly Podgoretsky ©   (2004-04-19 09:00) [4]

ООП, в части наследования и полиморфизма.
Сделай базовый класс с нужными виртуальными, абстрактными методами.


 
msgipss   (2004-04-19 09:33) [5]

Вообще хотелось посмотреть на опыт решения данного вопроса др.людьми, тема то достаточно общая при программировании задач различной сложности.


 
Erik ©   (2004-04-19 10:23) [6]

Сделай Try except на любом уровне своей модели и радуйся. А для обработки ошибок сделай отдельный класс и вызывай его в случае exception. Незабудь также, что expeption могут давать нетолько твои функции. :)


 
msgipss   (2004-04-20 05:05) [7]

хорошо, так и сделаю.... спасибо за ответы.
Тема закрыта.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
4-1075492150
mixrud
2004-01-30 22:49
2004.04.11
Как получить текущую область обновления рабочего стола


3-1078502443
Александр Крючков
2004-03-05 19:00
2004.04.11
Работа с блоб-полями через TClientDataSet


7-1079895775
Leviathan
2004-03-21 22:02
2004.04.11
AntiFreeze цикла


1-1082548702
rams
2004-04-21 15:58
2004.04.11
Можно ли поменять цвет "закрашивания" ProgressBar


1-1082371215
Dimaz
2004-04-19 14:40
2004.04.11
Нужен способ определения - файл бинарный/нет.