![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по проектированию класса [D7, XP]
Megabyte © (2006-10-30 10:09:00)Создаю класс, который будет:
1) Делать выборку из БД;
2) Формировать отчет в excel;
3) Отправлять отчет на e-mail.
Соответственно, делаю 3 метода:
1) Выборка и получение Датасета;
2) Получение Excel-отчета;
3) Отправление письма с приаттаченным файлом.
Создаю компоненты работы с БД в 1-м методе, там же хочу их уничтожить. Надо как-то передать набор данных в следующий метод(через результат 1-го метода, кот. является функцией). Вопрос: каким образом передать именно набор данных, а не ссылку на класс TpFIBDataSet? Пока объявил тип функции как TpFIBDataSet, но, как я понимаю, при выходе из 1-го метода(уничтожение компонентов работы с БД) ссылка будет неверной.
Можно, конечно, формировать отчет в Excel'е в том же методе, но хочется вынести это в отдельный метод.
Либо можно сделать компоненты работы с БД глобальными и уничтожать после формирования отчета, но это, по-моему, не есть гуд.
Я так понимаю, мне надо использовать клиентский набор данных?
Reindeer Moss Eater (2006-10-30 17:55:00) [1]Надо как-то передать набор данных в следующий метод(через результат 1-го метода, кот. является функцией).
А что, датасет этот не является членом класса?
Зачем его куда-то передавать?
И вообще зачем здесь класс, если процедурного подхода здесь за глаза и за уши?
Megabyte (2006-10-30 17:51:00) [2]
> Надо стараться, что бы порядок вызова методов не влиял на работу класса
Это понятно. Просто 2-й метод(получение отчета в Excel) не мыслим без 1-го метода(получение НД).
Но я специально их разделил, чтобы в будущем можно было провести, если потребуется, какие-то доп. действия с НД.
Методы объявлены как protected и являются функциями. А доступ к ним(запуск метода) идет через public-свойства, т.е. у меня есть свойство OtchetDataSet и AttachFile(файл excel, кот. будет прикрепляться к письму).
Рамиль (2006-10-30 14:14:00) [3]Надо стараться, что бы порядок вызова методов не влиял на работу класса, это признак плохого проектирования.
может лучше один public метод, а в private три метода, если так удобно?
Megabyte (2006-10-30 13:08:00) [4]Точно. Что-то я про конструктор с деструктором забыл. %)
StriderMan (2006-10-30 11:21:00) [5]
> ..там же хочу их уничтожить..
зачем уничтожать если передавать собрался?
если уж визуально не катит все делать, сделай компоненты доступа в private своего класса. Создавай в конструктор, разрушай в деструкторе.
> Вопрос: каким образом передать именно набор данных
экземпляры классов в Делфи передаются только указателями. Где ты его создал - неважно, важно чтобы он был создан, а потом разрушен.