Концепция
FRONTIER-logo

СИСТЕМА ОПЕРАТИВНОГО И УПРАВЛЕНЧЕСКОГО УЧЕТА

data-warehouse 03
  • Автоматизация торговых и
  • производственных процессов
  • Планирование материальных
  • потребностей на базе MRP II и TOC
  • Бесплатная рабочая версия для
  • оценки пригодности Системы

Как уже отмечалось выше, контроллер (controller) – это объект, который не относится к интерфейсу пользователя непосредственно, а отвечает за обработку системных событий, пришедших от модели-владельца или внешнего окружения. Контроллер определяет интерфейсы и методы для выполнения системных операций.

Другими словами, контроллер - это объект, соответствующие события которого вызываются моделью представления в ответ на приходящие ей системные события. Таким образом, разработчик может реализовать в этих блоках свой код и выполнить любые ответные действия как над самой родительской моделью или контроллером,  так и над всем программным окружением, доступным ему в момент исполнения события, осуществляя тем самым инверсию управления.

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

Контроллер не может существовать самостоятельно без базового объекта (в данном случае модели). В любом месте кода события или метода класса контроллера к свойствам и методам базовой модели можно обратиться в следующем формате: M.<property> или M.<method>,  где M – есть объектная ссылка на базовую модель, к которой присоединен данный контроллер. Такая переменная создается и инициализируется системой автоматически при создании объекта-контроллера. Текущий контроллер модели может быть изменен на другой объект во время выполнения программы, если того требует логика приложения. Достаточно в любом месте кода текущего контроллера подать команду:

M.setController(newСontroller)

Все системные события будут направляться теперь новому, предварительно созданному и инициализированному, объекту-контроллеру newController.

Описание свойств визуальной модели не содержит какой-либо информации о том классе контроллера, который будет задействован в момент запуска модели на исполнение (открытие). По умолчанию, в момент инициализации модели ей назначается некий базовый контроллер соответствующего типа. Тем не менее, в командной строке запуска модели (URI модели) можно указать класс контроллера, объект которого будет динамически создан и присоединен к модели, а также возьмет на себя обязанности по обработке всех поступающих событий.

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

 

Редактирование и компиляция класса-контроллера на языке PowerScript, как в прочем и классов других типов, производится в среде Combo специальным встроенным редактором классов. В случае реализации класса на языке Java можно воспользоваться как обычным текстовым редатором, так и специальной средой разработки (IDE) для Java-приложений, например Eclipse, NetBeans и др.

 

В качестве примера, на следующем рисунке представлен снимок окна - внутреннего редактора событий контроллера qco_client:

controller events

Окно редактора предназначено для создания и редактирования событий, методов и переменных класса контроллера выбранного типа.