| Модульная архитектура |
|
|
Использование модулей в DelphiМодульный движок в Delphi---------------------------------------------------- Данный материал предназначен в первую очередь для программистов, архитекторов имеющих некоторый опыт работы со RAD Delphi.Приложение написано под Delphi7 , но я думаю что не составит никакого труда портировать программу для других версий Delphi. Программа представляет модульную реализацию приложения для складского учета небольшой компании, складской учет это интересно, но более важно - это пример организации модульного архитектурного решения, решения - которое моажно применить в Ваших программах.
Базовая идеяВесь программный делится на автономные независимые, и не связанные между собой модули , в каждом модуле реализуется функционал, имеющий непосредственное отношение, только к одному логическому интерфейсу. Есть главный движок модулей – приложение в котором реализуется основной интерфейс, осуществляется переключение между отдельными программными модулями, настраиваются параметры отображения модулей, и подключение к СУБД. Это приложение-движок сканирует папку modules , и создает на главной форме дерево-список подключаемых модулей приложения. Подключаемые модули: каждый модуль создается по определенным правилам, и располагается в отдельном файле с расширением bpl отображается, в дереве модулей в главном приложении.
С помощью, каких механизмов это делается, неплохо написано вот здесь, а я лишь предлагаю готовый элегантный вариант решения с примерами, сам движок и несколько демонстрационных модулей. То есть, пример готового приложения на таком вот удобном, с моей точки зрения модульном движке.Движок разрабатывался для среды разработки Delphi 7. Создавать сложные программные комплексы с помощью данного движка удобно и легко, в общем одно удовольствие. В качестве недостатков, можно указать лишь значительный размер дистрибутива, так как приходится включать в дистрибутив все используемые библиотеки, но думаю с развитием высокосортного интернета и увеличением объемов жестких дисков это не так уж важно. Установка и предварительные настройкиДвижок разрабатывался под RAD Delphi 7. Для работы с модульным движком предварительно требуется выполнить следующее:
По умолчанию эти настройки должны быть сделаны , но необходимо проверить
Настройка основного приложения(движка модулей)Подключение к БДНастраиваем подключение программы к БД, если необходимо, Для подключения к БД в движке используются компоненты ADO, подключение осуществляется через adoсonnection, необходимо настроить строку ConnectionString подключения в компоненте В этом примере программа работает с СУБД Access , но есть и другие приложения с СУБД Oracle , можно использовать MSSQL Server. Настройка внешнего видаВсе настройки делаются в дизайн-тайме в главном меню приложения, пункт Вид приложения, после чего вы можете заблокировать или сделать невидимыми некоторые пункты меню, чтобы запретить пользователю менять настройки. Скрыть / показать отдельные элементы
Расположение меню
Расположение панели модулей
Задает расположение панели модулей:
Картинки (иконки)
Все эти настройки носят эстетический характер, а не влияют на функционал движка. Добавляем картинку логотипВ компонент Image1 вставляем картинку, с логотипом вашей программы. Для PanelTop устанавливаем цвет, определяющий цвет фона для логотипа.
Задаем размер иконок для дерева модулейДля регулировки размера иконок в дереве модулей используется стандартный ImageList с названием TreeImages, при изменении свойств width и height меняется высота и ширина иконок в дереве модулей. Размеры иконок могут быть 16x16 , 24x24, 20x20, 32x32 пикселя. Описание основных процедур в главном приложении (движке модулей)const BplInd = 'PLGBPL' ; Этот индикатор позволяет отличить НАШИ библиотеки bpl от прочих, например Borland библиотек. procedure buildtree; процедура строит дерево подчиненных модулей procedure GetDirectories(Directory,Extention: string); процедура сканирует папку modules. procedure LoadPackageTree(FileName :TFileName);считывает некий модуль в дерево. procedure TabModulesChange(Sender: TObject; NewTab: Integer;var AllowChange: Boolean); это событие отрабатывает при смене активного модуля во вкладке. procedure CreateMenuItem( Main :TMainMenu ; ItemName , GroupName : string; Data : Pointer ; GroupImgIndex , ImgIndex : integer ;SubItemName : string = '' ); Процедура создает пункт меню для соответствующего модуля. procedure ShowModulesMenu( Menu : TMainMenu; Show : boolean ); Данная процедура позволяет включить или выключить модули в меню. Создание подгружаемых модулейПравила, которые необходимо соблюдать при создании модулей.
end; автосоздание форм данном модульном движке недопустимо. Как создать модуль смотрите следующие графы
Настройка компонента ApplModinfo.На главную форму ChildForm1 ,обязательно помещается компонент ApplModInfo. В данном компоненте задаются основные настройки отображения модуля в дереве модулей и меню Модули главного приложения.Настройки
Настройка Project / Options /OutputDirectory, DCPOutputDirectory в Directories / Conditionals.Устанавливаем значение полей OutputDirectory , DCPOutputDirectory путь к папке modules нашего приложения, в моем случае это “C:\temp\moddelphi7\Modules”Установка Project / Options / DescriptionsПишем текст в поле descriptions – pluginsНастройка Run / Parametrs / HostApplicationВ HostApplication прописываем путь к загружаемому файлу движка в моем случае это “c:\temp\moddelphi7\PlgLoader.exe”Создаем подгружаемый модуль на основе шаблонаИз папки moddelphi7\templates загружаем файл temlates.bpl , после чего настраиваем компонент ApplModInfo (см Настройка компонента ApplModinfo). Далее настраиваем OutputDirectory- DCPOutputDirectory в Directories / Conditionals в опциях проекта (Project / Options ) – указываем путь к папке modules нашего приложения. В Run\Parametrs\HostApplication прописываем путь к загружаемому файлу движкаДобавляем новый функционал, сохраняем проект под нужным вам именем после чего запускаем приложение (Run/Run F9). Создаем новый подгружаемый модульОткрываем RAD среду разработки.
Расширение функционала главного модуляВы можете постепенно наращивать функционал главного модуля, для этого предусмотрен компонент mainmenu , а так же панель кнопок toolbutton2 Например, в главное меню можно добавить пункт для выбора соединения с БД. Для этого в mainmenu / файл добавляем пункт “Соединение” прописываем необходимый код для смены соединения. Собираем готовый дистрибутив для программыДанная программа, будет запускаться на ПК где не установлена RAD Delphi соответствующей версии, только в том случае, если вы скопируете соответствующие системные библиотеки (файлы с расширением bpl) в каталог с главным приложением движком. Список файлов: -----------
|
Модульная архитектура 







