Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
1-1082853146
val_5
2004-04-25 04:32
2004.05.09
препроцессорная переменная - где компил: D6 или D7


1-1082384472
pantel
2004-04-19 18:21
2004.05.09
Написание Form Designer а


9-1067971745
pavel_k
2003-11-04 21:49
2004.05.09
Быки и коровы


14-1082376034
Alex*
2004-04-19 16:00
2004.05.09
Глюк INDY или в моей версии Delphi чего-то не хватает


3-1082049671
Koba
2004-04-15 21:21
2004.05.09
Запросы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский