|
Тема |
Re: хубав код вапрос [re: KpyM] |
|
Автор |
G.Kreisel (непознат
) |
|
Публикувано | 08.04.04 12:53 |
|
|
Наистина хубав въпрос.
От контекста не личи за каква точно система става въпрос и затова ще допусна че говорим за четене на данни от физическо устройство (например диск).
Тогава получаваме следното:
1. Проверяваме дали може да четем и ако не - връщаме грешка
2. Четем данни...
Има обаче някои проблеми:
Грантирано ли е, че горната процедура е атомарна? -- т.е. Възможно ли е след проверката някой да ни "дръпне килимчето изпод краката"?
Например: проверяваме че файла съществува и че имаме права за четене и после между 1. и 2. някой го изтрива?
При работа с физически устройства, това винаги е възможно и функцията ReadData така или иначе ще трябва да връща грешка (ако например изведнъж се окаже, че мрежовата връзка е прекъснала?). Защо тогава да отделяме проверката? Още повече, че бихме могли (ако се налага) да напишем функцията по-сигурно:
1. LockFile()
2. Check()
3. Read()
4. UnlockFile()
Тази стратегия ясно показва че двата начина не са еквивалентни:
Първия ми се струва че позволява по-голям контрол (на този който пише библиотеката). А ако искате винаги може да експортирате функцията CanReadData()...Само без да задължавате хората да я викат....
|
| |
|
|
|