| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > посоветуйте, как организовать алгоритм |
| Автор: NieL 12.1.2011, 16:06 | ||
| приложение, в определенные моменты извлекает из zip-архивов файлы и выполняет определенные действия с ними. В ТЗ сказано, если не удалось извлечь файл, райсить эксепшен - "Не удалось извлечь файл "<имя_файла_в_пакете_обновления>" из пакета обновления" "<имя_файла_пакета_обновления>". Вопрос: Как более гибко и оптимально организовать алгоритм извлечения. 1. Написать отдельную процедуру, возвращающую в качестве out-параметра TStream (извлекаемый файл)
2. Обойтись без процедуры, и напряму в коде создавать TStream, извлекать в него и обрабатывать try..except 3. Как бы сделали вы? |
| Автор: Poseidon 12.1.2011, 16:31 |
| Я бы создал булиновскую функцию. True - все чики. False - не все чики |
| Автор: NieL 12.1.2011, 16:53 |
| при таком подходе придется дублировать одни и те же эксепшены в нескольких местах каждый раз когда будет возвращаться false. Я потому и задумался о необходимости вынесения в отдельную процедуру, чтобы избежать захламления кода одними и тем же эксепшенами, а так мог бы просто обернуть в try..except и прописать эксепшн. |
| Автор: 0x0027 12.1.2011, 17:01 |
| я бы оставил как есть, только процедуру заменил бы на функцию с возвращаемым булевым значением. и не забудь поменять строки 8 и 10 местами, иначе у тебя будет мемлик. |
| Автор: NieL 12.1.2011, 17:12 |
| спс. не заметил. а зачем возвращать bool значение? какой смысл возвращать true или false если при неудачном извлечении сработает эксепшен?, который при необходимости я могу обернуть в try..except, и обработать |
| Автор: 0x0027 12.1.2011, 17:15 |
| ну это уже тонкости реализации, которые известны только автору, так что решать тебе. главная идея в том, что должна быть единая процедура\функция. |
| Автор: Poseidon 12.1.2011, 17:38 |
| Вообще надо смотреть на перед. Что вдруг может вздуматься потом заказчику и реализовать все так, что бы потом проще было изменить. Именно основываясь на этом, я предложил свой вариант. В первом сообщении не было не слова сказано, что экзепшены нужно выводить в разных местах программы. Поэтому я предложил такой вариант. Ну а вообще, используемый вариант тоже не плох. И если нигде в программе не нужно будет пытаться распаковать без экзепшенов, и заказчику потом это точно не захочется, то можно оставить так. |
| Автор: Snowy 12.1.2011, 17:59 |
| Стрим должен создаваться вне процедуры. Алгоритм должен быть таким: 1. Создали стрим. 2. Вызвали процедуру распаковки. 3. Использовали стрим. 4. Уничтожили стрим. Именно в таком виде код будет легко читаем. Не придётся гадать, где что создаётся и почему умирает именно тут, если мы вообще не забыли прибить этот стрим после использования, т.к. мы его и не создавали. Это по поводу out параметра. А взрываться или не взрываться - зависит только от политики партии. Нужно взрываться - взрывайся. Только убрать за собой не забудь. |