Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по проектированию класса   Найти похожие ветки 

 
Megabyte ©   (2006-10-30 10:09) [0]

Создаю класс, который будет:
1) Делать выборку из БД;
2) Формировать отчет в excel;
3) Отправлять отчет на e-mail.

Соответственно, делаю 3 метода:
1) Выборка и получение Датасета;
2) Получение Excel-отчета;
3) Отправление письма с приаттаченным файлом.

Создаю компоненты работы с БД в 1-м методе, там же хочу их уничтожить. Надо как-то передать набор данных в следующий метод(через результат 1-го метода, кот. является функцией). Вопрос: каким образом передать именно набор данных, а не ссылку на класс TpFIBDataSet? Пока объявил тип функции как TpFIBDataSet, но, как я понимаю, при выходе из 1-го метода(уничтожение компонентов работы с БД) ссылка будет неверной.
Можно, конечно, формировать отчет в Excel"е в том же методе, но хочется вынести это в отдельный метод.
Либо можно сделать компоненты работы с БД глобальными и уничтожать после формирования отчета, но это, по-моему, не есть гуд.
Я так понимаю, мне надо использовать клиентский набор данных?


 
StriderMan ©   (2006-10-30 11:21) [1]


> ..там же хочу их уничтожить..

зачем уничтожать если передавать собрался?

если уж визуально не катит все делать, сделай компоненты доступа в private своего класса. Создавай в конструктор, разрушай в деструкторе.

> Вопрос: каким образом передать именно набор данных

экземпляры классов в Делфи передаются только указателями. Где ты его создал - неважно, важно чтобы он был создан, а потом разрушен.


 
Megabyte ©   (2006-10-30 13:08) [2]

Точно. Что-то я про конструктор с деструктором забыл. %)


 
Рамиль ©   (2006-10-30 14:14) [3]

Надо стараться, что бы порядок вызова методов не влиял на работу класса, это признак плохого проектирования.
может лучше один public метод, а в private три метода, если так удобно?


 
Megabyte ©   (2006-10-30 17:51) [4]


> Надо стараться, что бы порядок вызова методов не влиял на работу класса

Это понятно. Просто 2-й метод(получение отчета в Excel) не мыслим без 1-го метода(получение НД).
Но я специально их разделил, чтобы в будущем можно было провести, если потребуется, какие-то доп. действия с НД.
Методы объявлены как protected и являются функциями. А доступ к ним(запуск метода) идет через public-свойства, т.е. у меня есть свойство OtchetDataSet и AttachFile(файл excel, кот. будет прикрепляться к письму).


 
Reindeer Moss Eater ©   (2006-10-30 17:55) [5]

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

А что, датасет этот не является членом класса?
Зачем его куда-то передавать?

И вообще зачем здесь класс, если процедурного подхода здесь за глаза и за уши?



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

Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
3-1158549817
alabama01
2006-09-18 07:23
2006.11.19
Quick report. Что происходит при минимизации окна просмотра?


11-1138885890
Igi
2006-02-02 16:11
2006.11.19
Не могу поменять Caption у формы


6-1151566641
ПЛОВ
2006-06-29 11:37
2006.11.19
Как получить количество отправленных/принятых байт?


3-1158307102
Guest001
2006-09-15 11:58
2006.11.19
Exception в Firebird не ловится в Delphi - почему?


15-1162272915
pusrg
2006-10-31 08:35
2006.11.19
Проблема с воспроизведением видеофайла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский