Разработка большого проекта

При разработке большого проекта возникают следующие задачи:

В этом разделе описывается мой подход к решению этих задач.

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

Имеется  "корневой" DLL, в котором находятся минимальный набор файлов, глобальных переменных и процедур, общих для всей системы.   Все эти ресурсы "корневого" DLL экспортируются.  "Корневой" DLL имеет свой Dictionary, в котором описаны общие для всего проекта файлы.  Общих файлов, и переменных должно быть как можно меньше и они должны быть простыми.   Доступ к общим файлам лучше "завернуть" в процедуры-методы типа GetCompany_Name(Company_ID), GetTow_Price(Tow_ID).  Это позволяет скрыть от других модулей подробности реализации общих файлов (то есть не описывать общие файлы в других модулях системы).

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

Имеется один EXE-файл, который реализует только общий frame и главное меню системы.  Этот модуль может вообще не иметь доступа к файлам.  Его задача просто вызывать процедуры, экспортируемые DLL-ми подсистем.

Я оставляю в каждом "подсистемном" DLL-е только одну экспортируемую процедуру (диспетчер), которой в качестве параметра передаю имя вызываемой процедуры.  Процедура-диспетчер представляет из себя одну  case-структуру, которая анализирует передаваемое имя и вызывает соответствующую внутреннюю процедуру.  Это позволяет добавлять в подсистему новые процедуры не изменяя ее внешний интерфейс, и, следовательно, не перекомпилируя весь проект.

 

Hosted by uCoz