Расположение файлов проекта

СУБД

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

Как правило, большинство книг по программированию являются либо пересказом статей Help к языку, либо набором комиксов по типу «нажмите эту кнопочку увидите такую картинку, теперь нажмите эту кнопочку …». Нельзя сказать, что это плохо или не нужно. Просто между двумя этими крайностями образовался провал, в котором и пропадает множество новичков. Поэтому любая книга, которая хоть как-то его закрывает обычно пользуется повышенным спросом.

О каком «провале» собственно идет речь?

Первый разрыв — это терминология. Определение различным терминам либо вообще не дается (дескать и так все понятно), либо дается строго научное (т.е. очень заумное, лучше бы его и не давали). В результате, читая дальнейшие статьи уже совершенно непонятно о чем собственно идет речь.

Второй разрыв — это когда и что лучше всего применять. Обычно изложение строится таким образом: для решения задачи сделаем так, так и вот так. Но не предпринимается даже попытки объяснить, а почему собственно не иначе, когда есть другой способ? Как следствие, когда новичек узнает о том, что одну и ту же задачу можно решить даже не двумя, а тремя, четыремя и более способами у него в голове начинается полная карусель. Бросает из одной крайности в другую.

Есть и еще одна проблема, связанная с предыдущими двумя. Обычно в FoxPro начинают разбираться люди, уже попробовавшие свои силы в программировании на других языках (чаще всего в Delphi или Basic, да даже программисты работавшие ранее в FoxPro for DOS) и они пытаются применить стиль программирования хорошо (или не очень) им известного языка в Visual FoxPro и очень удивляются сталкиваясь с неожиданными (в смысле — не ожидАемыми) проблемами: вот ведь, в руководстве написано, что это можно, а у меня не выходит! А проблема оказывается в самом стиле программирования. Кое-какие приемы, хорошо работающие в Delphi для FoxPro являются попросту неприменимы.

Вот я и попытаюсь заполнить этот «провал» и описать некоторые рекомендации по программированию на FoxPro, с пояснениями почему собственно желательно делать так, а не иначе.

Советы и рекомендации

FoxPro — это язык, который очень снисходительно относится к ошибкам программиста: не дали определения переменной — ничего, я сам определю; забыли указать рабочую область — ничего, я сам попытаюсь ее найти. И так во многих случаях, если Вы забыли что-то указать FoxPro самостоятельно попытается это что-то найти.

С одной стороны, это конечно хорошо и облегчает жизнь програмисту, но вот с другой при создании достаточно крупных проектов в результате такой «самодеятельности» со стороны FoxPro могут возникать ошибки, которые очень трудно отловить.

Самая распространенная ошибка — это самоопределение переменных. Если Вы не дали определение переменной в процедуре, то сначала FoxPro попытается найти одноименную переменную определенную в другой процедуре и доступную в данной и если такая переменная существует, то она и будет использована к полному недоумению программиста вовсе не ожидающего такой «подлости»

Со стороны разработчиков FoxPro уже явно наметилась тенденция к ужесточению синтаксиса. Оно и понятно, такие языки программирования и создавать легче, да и библиотеки поддержки будут иметь меньший объем. Но пока это только тенденция, посмотрим, что будет дальше.

С другой стороны, конечно просто замечательно, что FoxPro предоставляет возможность решить одну и ту же проблему несколькими способами, но если в каждом конкретном случае размышлять на тему «что лучше использовать», то Вы никогда не закончите ни одного приложения.

В результате, появились некоторые правила и рекомендации по программированию, которые ни в коем случае не являются абсолютно необходимыми по принципу «делай так и ника иначе». Вы можете нарушить их абсолютно все и тем не менее написать работоспособное приложение. Цель этих рекомендаций — это уменьшить вероятность появления ошибок и облегчить как собственно написание, так и последующее исправление программ

Расположение файлов проекта

По большому счету, проект — это набор файлов. Возникает вопрос — где и как их расположить? Если у Вас он не возникает, то Вы или очень опытны (это же очевидно!), или наоборот очень неопытны (а разве это важно?).

Главным правилом в данном случае выступает разделение рабочих (модифицируемых) файлов и исполняемых (не модифицируемых). Имеется в виду прежде всего их физическое (по разным директориям) разделение.

Причина такого «неравноправия» прежде всего в том, что есть серьезные опасения в порче исполняемых файлов. Пусть случайное и непреднамеренное. Но если рабочие и исполняемые файлы лежат в одной директории, то очень легко ошибиться с выбором и модифицировать не тот файл. В результате — FoxPro или начнет работать с ошибками или вообще перестанет работать.

Другой причиной является возможность быстрого копирования рабочих файлов. Если они расположены компактно в одной директории, то Вы не задумываясь просто копируете эту директорию со всем содержимым и не надо мучительно выискивать, что надо копировать, а что лишнее.

Необходимость копирования объясняется как минимум необходимостью создания резервных копий всех рабочих файлов (есть и другие причины). По самой своей сути программирование — это модификация файлов. А файл можно «модифицировать» так, что мало не покажется. После чего остается только полностью удалить эту «модификацию» и начать все заново. Хорошо, если у Вас есть резервная копия, тогда Вы начнете не с нуля. А если нет?

Еще одной немаловажной причиной хранения файлов проекта отдельно от файлов FoxPro является удобство поиска нужных рабочих файлов. Если они свалены в одну «кучу» с рабочими файлами FoxPro, то становится очень тяжело найти нужный файл.

Итак, файлы Вашего проекта не следует хранить в той директории, где установлен собственно FoxPro. Следовательно, необходимо создать отдельную директорию для Ваших проектов.

Нежелательно в именах директорий, где расположен Ваш проект использовать пробелы и русские буквы. Пробелы приведут к некторому усложнению программирования (необходимы будут дополнительные кавычки во всех путях доступа). А русские буквы нежелательны потому, что FoxPro разрабатывалось прежде всего для англоязычных пользователей и все прочие языки — это уже «надстройка». Причем зачастую эта «надстройка» весьма кривовата. Никогда не знаешь где тебе аукнутся русские буквы.

В идеале, хорошо бы давать имена директорий в DOS-формате (т.е. до 8 символов), но это уже перестраховка. Уместитесь в 8 символов — хорошо, нет — ничего страшного.

Расположение файлов внутри проекта

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

Прежде всего, обязательно следует выделить отдельную директорию для хранения базы данных. Как правило, эту поддиректорию так и называют «DATA». В этой директории хранится как файл контейнера базы данных (DBC, DCT, DCX), так и файлы собственно таблиц (DBF, FPT, CDX)

Прочие файлы также следует «раскидать» по поддиректориям, но тут уже возможны варианты.

В примерах от MicroSoft рекомендуется хранить файлы по их типам: формы в директории Forms, классы в директории Class и т.п. Однако я предпочитаю хранить файлы по их логическому назначению: главные файлы программы в директории Main, файлы для работы со справочниками в директории SPR, файлы для работы с документами в директории Document и т.п. Какой вариант примете Вы — не так важно. Главное, чтобы у Вас файлы были «раскиданы» по нескольким директориям

Итак, в результате у Вас получится примерно следующая структура каталога Вашего проекта
C:\ProjVFP
C:\ProjVFP\MainProj
C:\ProjVFP\MainProj\Class
C:\ProjVFP\MainProj\Data
C:\ProjVFP\MainProj\Forms
C:\ProjVFP\MainProj\Prg

Здесь каталог C:\ProjVFP — предназначен для хранения многих проектов, которые Вы без сомнения еще напишите. А собственно уже конкретно Ваш проект расположен в директории C:\ProjVFP\MainProj

Содержимое главной директории проекта

Ну хорошо, раскидали мы файлы по разным поддиректориям, а что же остается внутри главной директории проекта?

А вот внутри главной директории остается, во-первых, собственно файл проекта (файлы с расширением PJX, PJT), во-вторых, обязательно файл конфигурации CONFIG.FPW (это обычный текстовый файл, о нем чуть ниже) и в-третьх, файлы ресурсов FoxUser.DBF и FoxUser.FPT Прочие файлы уже по мере необходимости в конкретном проекте, но как правило, больше ничего здесь храниться не должно.

Вполне естесственное желание, назвать файл проекта тем же имененем, что и директория в которой он расположен, поскольку собственно ради него все это и затевается. Именно так и следует поступить — назвать файл проекта MainProj.pjx (и MainProj.pjt)

Файл ресурсов FoxUser.dbf и FoxUser.fpt можно и не создавать специально, а только сделать специальную запись в файле конфигурации (в этом случае он будет создан автоматически).

Зачем вообще надо тащить этот файл ресурсов в директорию проекта? Дело в том, что файл ресурсов хранит в себе координаты и положения всех когда-либо открываемых окон в среде FoxPro. Это значит, что в случае использования одного и того же файла ресурсов для всех проектов это файл «раздуется» до неимоверных размеров. А ведь в случае копирования проекта домой, желательно захватить с собой и файл ресурсов, чтобы «картинка не сбилась». Удобнее это сделать, если файл ресурсов физически расположен в той же директории, где и сам проект, а не искать его в директории FoxPro.

Определить какой именно файл ресурсов используется и где он находится можно с помощью функции SYS(2005)