![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
NieL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
приложение, в определенные моменты извлекает из zip-архивов файлы и выполняет определенные действия с ними. В ТЗ сказано, если не удалось извлечь файл, райсить эксепшен - "Не удалось извлечь файл "<имя_файла_в_пакете_обновления>" из пакета обновления" "<имя_файла_пакета_обновления>". Вопрос: Как более гибко и оптимально организовать алгоритм извлечения.
1. Написать отдельную процедуру, возвращающую в качестве out-параметра TStream (извлекаемый файл)
2. Обойтись без процедуры, и напряму в коде создавать TStream, извлекать в него и обрабатывать try..except 3. Как бы сделали вы? Это сообщение отредактировал(а) NieL - 12.1.2011, 17:05 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Я бы создал булиновскую функцию. True - все чики. False - не все чики
![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
NieL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
при таком подходе придется дублировать одни и те же эксепшены в нескольких местах каждый раз когда будет возвращаться false. Я потому и задумался о необходимости вынесения в отдельную процедуру, чтобы избежать захламления кода одними и тем же эксепшенами, а так мог бы просто обернуть в try..except и прописать эксепшн.
|
|||
|
||||
0x0027 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
я бы оставил как есть, только процедуру заменил бы на функцию с возвращаемым булевым значением.
и не забудь поменять строки 8 и 10 местами, иначе у тебя будет мемлик. |
|||
|
||||
NieL |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 214 Регистрация: 10.2.2008 Репутация: 1 Всего: 1 |
спс. не заметил.
а зачем возвращать bool значение? какой смысл возвращать true или false если при неудачном извлечении сработает эксепшен?, который при необходимости я могу обернуть в try..except, и обработать Это сообщение отредактировал(а) NieL - 12.1.2011, 17:13 |
|||
|
||||
0x0027 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 29.1.2010 Репутация: нет Всего: -1 |
ну это уже тонкости реализации, которые известны только автору, так что решать тебе.
главная идея в том, что должна быть единая процедура\функция. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Вообще надо смотреть на перед. Что вдруг может вздуматься потом заказчику и реализовать все так, что бы потом проще было изменить. Именно основываясь на этом, я предложил свой вариант. В первом сообщении не было не слова сказано, что экзепшены нужно выводить в разных местах программы. Поэтому я предложил такой вариант.
Ну а вообще, используемый вариант тоже не плох. И если нигде в программе не нужно будет пытаться распаковать без экзепшенов, и заказчику потом это точно не захочется, то можно оставить так. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Стрим должен создаваться вне процедуры.
Алгоритм должен быть таким: 1. Создали стрим. 2. Вызвали процедуру распаковки. 3. Использовали стрим. 4. Уничтожили стрим. Именно в таком виде код будет легко читаем. Не придётся гадать, где что создаётся и почему умирает именно тут, если мы вообще не забыли прибить этот стрим после использования, т.к. мы его и не создавали. Это по поводу out параметра. А взрываться или не взрываться - зависит только от политики партии. Нужно взрываться - взрывайся. Только убрать за собой не забудь. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |