Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.029 c
14-1078800394
mfender
2004-03-09 05:46
2004.04.11
70 лет первому космонавту!


8-1076230695
Руслан
2004-02-08 11:58
2004.04.11
Определение цвета пиксела картинки по его координатам


14-1082051532
pepers
2004-04-15 21:52
2004.04.11
Разработка приложения


1-1082476978
jiuraf
2004-04-20 20:02
2004.04.11
Как скопироватьсодержимое RichEdit1 В RichEdit2?


1-1082364110
Moleg
2004-04-19 12:41
2004.04.11
Формирование отчетов в виде html файла?




   Наверх