![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Mifody |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 5.8.2008 Репутация: нет Всего: 2 |
Всем доброго времени суток.
Интересует экспертный (ну может и не совсем) совет ![]() Пишу отправлялку картинок на хостинги. Итак, дано: 1. есть несколько классов, выполняют почти одинаковую работу. Сами действия довольно емкие по времени и в обычном режиме (если выполнять в основном потоке программы) подвешивают форму. 2. для избавления зависаний вынес вызов методов классов в отдельный поток, наследник TThread. С этой частью все Ок. Что мне пока не нравится. У классов есть несколько методов, которые выполняют разные действия (авторизация, проверка списка картинок, отправка картинок). Т.е. некоторые действия производятся не зависимо от типа работы, некоторые зависят от типа работы. Сейчас у меня, к примеру, получаются три класса потока, которые за небольшим исключением повторяют друг друга. Очень хочется свести все в один класс (дабы, если возникнет необходимость, не пришлось менять код нескольких потоков, а такая необходимость возникнет из-за особенностей защиты программы). Какое решения мне видятся "в лоб": завести переменную в классе, типа "ТипЗадания" и в методе execute в зависимости от ее значения по условию выполнять действие. В таком случае, код метода получается довольно громоздкий :(. Есть еще какие более "изящьные" методы решения??? Если что не понятно написал (хоть я и попытался максимально описать) спрашивайте ![]() |
|||
|
||||
AKATAN |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 30.9.2008 Где: Украина Репутация: 1 Всего: 1 |
Так и сведи в один класс. Сделай потомки, и не будет у тебя море копипастного кода. Не вижу проблемы. |
|||
|
||||
Dik0n |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.5.2011 Репутация: 2 Всего: 10 |
Использовать наследование и будет тебе счастье. Заводим базовый класс, в котором описываем общий функционал, а остальные классы наследуем от него.
Это сообщение отредактировал(а) Dik0n - 24.6.2011, 19:11 --------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой |
||||
|
|||||
Mifody |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 5.8.2008 Репутация: нет Всего: 2 |
ммм, наверное я не совсем понятно объяснил :(.
То, что мне надо использовать в разных задачах (отправка событий, даже методы создания и уничтожения) я и сделал через базовый класс. Вообщем наводящий вопрос/уточнение: При запуске потока выполняется метод Execute? правильно? именно он у меня НЕМНОГО разный для разных задач. У меня вообще, в классах потоков присутствует только реализация этого метода, все остальное (благо хоть это получилось унифицировать) вынесено в базовый класс. |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Ну сделай декомпозицию Execute.
Создай разные методы для каждогой задачи, а в Execute просто вызывай нужный. Совсем не обязательно всё класть в один метод. Разложи на несколько. |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Шаблон Strategy - это называется. У меня для таких вещей обычно присутствует перекрытый класс трэда, трэд - лоджик и трэд-мэнэджер который, отвечает за конфигурацию, создание, разрушение "заданий" Трэд лоджик - реадизует саму логику "работы", ну а трэд выполняет конкретную логику, сконфигуренную в трэд - мэнэджере. Плюсы - не надо заботиться о корректном создании./разрушении потоков (особенно когда классы трэдов со временем "обрастают"), относительно гибкое распараллеливание задач. Минусы - относительная сложность, которая, будучи раз реализованная, экономит кучу времени
Это сообщение отредактировал(а) cat512 - 30.6.2011, 22:41 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |