Re[3]: Создавать ли пустой файл?
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 07.02.08 14:12
Оценка:
Здравствуйте, igna, Вы писали:

I>А чтобы не было лени по реализации специального класса?

Не изобретать велосипеды при разработке. А на поддержке не мучаться такими заоблачными проблемами, как создавать или не создавать пустые файлы. Вспоминая объемный список кейсов по системе, которую поддерживаем, ужасаюсь, какую дурную, оказывается, систему поддерживаю: вон-те, у людей самая ужасная бага в программе — создание пустых файлов, а у тебя, посмотри, какие болезни???!!!
Re[4]: Создавать ли пустой файл?
От: igna Россия  
Дата: 07.02.08 14:29
Оценка:
Здравствуйте, rsn81, Вы писали:

R>А на поддержке не мучаться такими заоблачными проблемами, как создавать или не создавать пустые файлы.


Если ты прочитал пост, на который ответил, то знаешь, что что дело не в этом. Я баги пофиксил, поведения программы при этом не изменил, она как не создавала пустых файлов (точнее файлов только с заголовком и footer-ом), так и не создает. Но обратил внимание, что приведшие к появлению этих багов изменения программы, не привели бы к их появлению, если бы с самого начала не было решено предотвращать создание пустых файлов.
Re: Создавать ли пустой файл?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.02.08 16:13
Оценка:
Здравствуйте, igna, Вы писали:

I>Мнение программиста: Если пустой файл никому не мешает, нечего и избыточную логику в программе городить.


Что за синематограф? Раз просят, значит — мешает.

А с файлом просто: создавать по первому запросу, закрывать по достижении некоего логического конца фазы работы. Ну, или в конце работы программы.

Что за спор?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Создавать ли пустой файл?
От: igna Россия  
Дата: 07.02.08 16:34
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Что за синематограф? Раз просят, значит — мешает.


Не мешает. Спрашивал.
Re[3]: Создавать ли пустой файл?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.02.08 16:56
Оценка:
Здравствуйте, igna, Вы писали:

ГВ>>Что за синематограф? Раз просят, значит — мешает.

I>Не мешает. Спрашивал.

Тогда я, что-то, ничего не понимаю.

Вот это
Автор: igna
Дата: 07.02.08
, получается, нужно считать темой беседы?

Отлаживая это подумал, вот если бы с самого начала не пытались избежать создания файла с пустым содержанием, все добавления прошли бы как по маслу. Но оба мнения, которые я привел в первом посте (пользователя и программиста) мои; как пользователю пустые файлы мне тоже не нужны. Хотя отсутствие багов важнее.

Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Создавать ли пустой файл?
От: igna Россия  
Дата: 07.02.08 17:06
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Вот это
Автор: igna
Дата: 07.02.08
, получается, нужно считать темой беседы?


Да. В этом конкретном случае возможно не стоило предпринимать даже минимальные усилия для того, чтобы избежать создания бессодержательного файла. Или обобщая, не стоит обрабатывать какой-то частный случай, если поведение программы для общего случая удовлетворительно.
Re[5]: Создавать ли пустой файл?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.02.08 19:53
Оценка: 3 (1) +1
Здравствуйте, igna, Вы писали:

ГВ>>Вот это
Автор: igna
Дата: 07.02.08
, получается, нужно считать темой беседы?


I>Да. В этом конкретном случае возможно не стоило предпринимать даже минимальные усилия для того, чтобы избежать создания бессодержательного файла. Или обобщая, не стоит обрабатывать какой-то частный случай, если поведение программы для общего случая удовлетворительно.


Унутреннее противоречие. "Общий случай" — такого вообще не бывает в технике. Это философская абстракция, обобщение. Все случаи — конкретны и, следовательно, частны. Однако, вполне возможно, что для некоторого частного случая поведение программы не определено или определено не корректно.

Короче, это всё очень просто.

Введём несколько утверждений:

P — истина, когда работает программа.
D — истина, когда есть входной поток данных, преобразуемый в выходной файл.
W — истина, когда входные данные могут быть выведены в файл, т.е. процесс их обработки проходит (прошёл) успешно.
F — истина, когда появляется выходной файл.

Нормальная последовательность такова (-> — импликация):

P -> D (Запустили программу, можем принимать данные)
D -> W (Приняли данные, можем их обрабатывать)
W -> F (Обработали — выталкиваем в файл)
(1)

В точке (1): F = P & D & W. Это то, как обычно понимают процесс вывода программой некоторых данных: программа запущена (P), есть входные данные (D) и есть повод что-то в выходной файл записать (W).

У тебя получилось:

P -> F' (Запустили программу, создали "подготовленный файл")
F' -> D (Создали файл — готовы принять данные)
D -> W (Приняли данные, можем их обрабатывать)
W -> F'' (Обработали — выталкиваем в файл)
// А потом вам добавили ещё:
We -> F''' (We — конец обработки, F''' — завершающая последовательность)
F''' -> F (Наконец-то!)

То есть первоначальное выражение, описывающее процесс, усложнилось: F = P & F' & D & W & F'' & We & F'''.

И где здесь общий и частный случай? ИМХО, просто не стоило ставить телегу впереди лошади и писать заголовок до получения результата обработки первых порций данных. Как пить дать, выиграли один if. Зато влепили ограничение на структуру файла, это я о заголовке. Описание же того, как связывали запись footer с выводом "второй" последовательности, чтобы поправить положение дел, может служить почти классической иллюстрацией к тому, как не надо такие вещи делать.

Собственно, это я к чему? Если программа спроектирована без глупых допущений, перемешиваний выхлопной трубы и карданного вала и неуместных оптимизаций, то и вопросов, подобных твоему не возникает. Поэтому здесь надо не гадать относительно "общности" и "частности" случаев (подобными рассуждениями в таких ситуациях пущай манагеры балуются, всё равно не им программы писать), а просто исправить это хозяйство и всё. Что ты, судя по всему и сделал. И это и есть единственно правильный подход.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: Создавать ли пустой файл?
От: igna Россия  
Дата: 08.02.08 09:08
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> ИМХО, просто не стоило ставить телегу впереди лошади и писать заголовок до получения результата обработки первых порций данных.


Не совсем так. Там данные уже были, просто вместо того чтобы написать:

if (!(первая_последовательность.Empty() && вторая_последовательность.Empty())) {
    header.Write(stream);
    первая_последовательность.Write(stream);
    вторая_последовательность.Write(stream);
    footer.Write(stream);
}


оставили как было:

    первая_последовательность.Write(file_name);
    вторая_последовательность.Write(file_name);


, а вывод header-а и footer-а засунули в методы Write первой и второй последовательности.

Почему сделали такое безобразие? Там были две как бы причины, во-первых на самом деле программа пишет несколько файлов, причем во всех остальных случаях только одну последовательность в файл, потому каждый Write свой файл сам и создает; во-вторых Write принимал file_name, а не stream, а Empty последовательностей вовсе отсутсвовали. У программиста в голове случилось то ли замыкание, то ли наоборот, и он нашел "простое решение".

Не хочу о(б)суждать то как это было сделано, написал, чтобы было ясно о чем идет речь.

ГВ>Собственно, это я к чему? Если программа спроектирована без глупых допущений, перемешиваний выхлопной трубы и карданного вала и неуместных оптимизаций, то и вопросов, подобных твоему не возникает.


Представим себе, что программа спроектирована правильно и запись в файл производит специальный класс, причем класс этот создает файл лишь в том случае, если есть данные для записи. Немаловероятно, что когда-либо в заголовок файла будет добавлена некая инфомация предназначенная для использования другой программой. Все будет работать нормально, пока последовательность как-нибудь не окажется пустой. Баг конечно пофиксят. Например добавлением в последовательность специального неким образом невидимого элемента. Паранойя? Но ведь нечто похожее уже случилось.
Re: Создавать ли пустой файл?
От: darkker  
Дата: 10.02.08 07:04
Оценка:
Здравствуйте, igna, Вы писали:

I>Ситуация: Функция/метод создает файл, пишет в него некий заголовок и передает его дескриптор или связанный с ним поток другим функциям/методам, которые тоже иногда пишут кое-что в этот файл. А иногда не пишут.


I>Запрос пользователя (change request): Если никакой информации кроме заголовка в файле нет, нечего и файл создавать.


I>Мнение программиста: Если пустой файл никому не мешает, нечего и избыточную логику в программе городить.


I>А вы что скажете?

А в чем проблема передавать другим ф-ия не дескриптор, а некоторый класс-обертку? Эта обертка будет отвечать за запись заголовока и footer.
Re[2]: Создавать ли пустой файл?
От: igna Россия  
Дата: 10.02.08 08:35
Оценка:
Здравствуйте, darkker, Вы писали:

D>А в чем проблема передавать другим ф-ия не дескриптор, а некоторый класс-обертку? Эта обертка будет отвечать за запись заголовока и footer.


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

PS. Пользователь в данном случае не заказчик, программист и пользователь от заказчика равноудалены.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.