Иконка ресурса

Библиотека MVC для ES 0.9.1

/**************************************************************************
* MVC.jsx
* DESCRIPTION: Классы и методы для реализации приложений согласно архитектуры MVC
* @@@BUILDINFO@@@ MVC.jsx 1.05 Thu Jan 02 2014 18:33:29 GMT+0200
*
* Библиотека ориентирована на приложения любого уровня сложности, требующие развитой подсистемы UI и расширенных методов взаимодействия с пользователем.
*
* NOTICE: Для реализации коллекций использует Collection.jsx
*
/**************************************************************************
* © Вячеслав aka SlavaBuck, 02.01.2014. buck#bk.ru
*/
MVC.png


Примеры использования содержаться в файлах:
SnpMVC_Simple.jsx
SnpMVC_SimpleControllers.jsx
SnpMVC_SimpleApplication.jsx


Библиотека содержит определения следующих MVC-объектов:
----------------------
MVCApplication - родительский класс для приложения в рамках архитектуры MVC (отвечает за диспетчеризацию событий между моделями и представлениями), а также предоставляет весь базовый интерфейс для управления моделями, представлениями и контролёрами.
----------------------
Предоставляемые методы:
addModel(obj) - создаёт на основе объекта obj объект модель и добавляет его в коллекцию моделей приложения;
addView(obj) - создаёт на основе объекта obj объект представление и добавляет его в коллекцию представлений приложения;
addController(obj); - создаёт на основе объекта obj объект контролёр и добавляет его в коллекцию контролёров приложения;
removeModel(obj) - удаляет объект модель из коллекции моделей приложения;
removeView(obj) - удаляет объект представление из в коллекции представлений приложения;
removeController(obj) - удаляет объект контролёр из коллекцию контролёров приложения;
removeMVС(obj) - удаляет сразу объекты модели, представления и контролёра из соответствующих коллекций (в аргументе принимает объект контролёр или его id);
findController(obj) - возвращает контролёр из коллекции контролёров приложения, ассоциированный с переданным в аргументе MVC-объектом;
Create(prefs) - фабричный метод для создания объектов приложений при этом объект параметр (если передан) передаётся конструктору MVCApplication;
Код:
  - основные (необязательные) свойства prefs:
      name { String }     - ассоциированное с приложением имя/название приложения (если не указано - генерируется автоматичеки)
      caption { String }  - отображаемая строка в заголовке главного окна приложения (если не указано - используется name)
      version { String }  - версия приложения (если не указано - генерируется автоматически 0.00)
      view { String }       - ресурсная ScriptUI строка, используемая для создания главного окна приложения (по умолчанию == 'dialog');
Init() - абстрактный метод, предназначеннный для переопределения в конечном приложении (автоматически вызывается из метода run() );
run() - пртотипный метод, перед вызовом метода главного окна приложения show() вызывает метод приложения Init() (если определён) и возвращает результат вызова метода window.show();
_defaultHandler() - для внутреннего использования, используется в качестве обработчика по умолчанию;(onChange/onChanging) для представлений при их связывании
_dispatcher() - для внутреннего использования, реализует диспетчеризацию событий между моделями и представлениями;
----------------------
MVCModel - базовый класс, представляющий модель данных в рамках архитектуры MVC. Может инкапсулировать любые структуры и типы данных JavaScript.
----------------------
Предоставляемые методы:
isValid(); - возвращает свойство _status_ модели, которое может устанавливаться в методе validator(), ассоциированном с данной моделью;
validator() - сам метод изначально вообще не определён в объекте MVCModel, но в диспетчере предусмотрен вызов данного метода при изменении модели - может произвольно определяться пользователем. В качестве аргумента данному методу передаются аргументы аналогично методу Object.watch(). Предполагается, что метод должен возвращать будево значение (которым будет инициализировано встроенное свойство _status_ модели, либо непосредственно его устанавливать в зависимости от полученных в аргументе значений).
----------------------
MVCView - класс представления, ориентирован на использование в рамках подсистемы ScriptUI.
----------------------
Предоставляемые методы:
Init() - прототипный метод, предназначенный для переопределения в конечном объекте представления, вызывается автоматически сразу после добавления представления к своему графическому контейнеру (по умолчанию ничего не делает);
rebind( MVCModel | { string - model.id } ) - метод предназначен для одностороннего связывания представления с моделью в направлении от представления к модели;
remove() - предназначена для удаления ScriptUI объекта, ассоциированного с представлением из контейнера, в котором он содержится, сам объект представления из соответствующей коллекции приложения не удаляется. Вызывается из метода MVCApplication.removeView(obj). Для осуществления специальной функциональности - может быть переопределён в пользовательском объекте;
render() - сам метод изначально вообще не определён в объекте MVCView, но в диспетчере предусмотрен вызов данного метода при изменении ассоциированного с представлением свойства (после изменения связанной с данным представлением модели). Совместно с методом модели validator() могут быть использованы для специального оформления представления в зависимости от состояния модели.
----------------------
MVCController - центральный класс в рамках архитектуры MVC. Реализует связывание моделей и представлений как между собой, так и с самим приложением.
----------------------
Предоставляемые методы:
никаких дополнительных методов не предоставляет. Вся необходимая работа происходит в методе MVCApplication.addController(obj). который ожидает наличия текстового свойства binding в obj, которое в декларативном стиле определяет связываемые данным контролёром модель и представление.
После создания и инициализации, контролёр получает следующие собственные свойства:
Код:
        MVCController.id = (id)||'ctrl';
        MVCController.app = appRef;         // Свойство app контролёра всегда указывает на текущий экземпляр объекта-приложения, в рамках которого был создан контролёр
        MVCController.binding = '';            // Текстовое свойство, которое в декларативном стиле содержит описание связи модель-контролёр в формате "id_model.prop[.prop][.prop]:id_view.prop[.prop][.prop]"
        MVCController.model = null;         // Указатель на соответствующий объект модели (укзанный в строке binding) в списке моделей приложения
        MVCController.model_obj = null;
        MVCController.model_key = null;   // model_obj[model_key] == model_value
        MVCController.model_value = null;
        MVCController.view = null;           // Указатель на объект представления в списке представлений приложения
        MVCController.view_obj = null;
        MVCController.view_key = null;     // view_obj[view_key] связывается с model_value
... подробности в коде. Таким образом контролёр всегда содержит ссылки на связанные с ним модели и представления. Единственная особенность использования заключается в том, что архитектура использования контролёров рассчитана на архитектуру "одна модель ко многим представлениям" — один контролёр – одно представление.
Несколько контролёров можно привязывать к одной и той же модели (в том числе к одному и тому же свойству одной и той же модели) но к разным представлениям. Бессмысленно привязывать множество моделей к одному представлению - в этом случае всегда будет работать только последнее привязанное. Для связывания в обратном порядке "одно представление - много моделей" добавлен интерфейс rebind() для моделей, который позволяет неограниченно и произвольно переподключать представление между различными моделями. Причём такое переподключение совершенно не влияет на работу связки подключаемой модели со своим 'родным' представлением (или несколькими) в рамках ранее определённого для неё контролёра(ов), а работает параллельно с ними.
Таким образом совместное использование контролёров и интерфейса представлений rebind() позволяет реализовать архитектуру "многие - ко многим" между моделями и представлениями.
Подробности в коде (см. пример SnpMVC_SimpleApplication.jsx).

Обсуждение ведётся в http://forum.rudtp.ru/threads/realizacija-mvc-v-extendscript-collection-jsx-debug-prjaniki.57677/
Автор
SlavaBuck
Скачиваний
1 891
Просм.
1 891
Первый выпуск
Обновление
Рейтинг
0.00 звёзд Оценок: 0

Еще ресурсы от SlavaBuck

Поделиться этим ресурсом

Последние обновления

  1. Обновление и переход на новую систему версий

    Библиотека переехала на GitHub и продолжает активно развиваться.
  2. Обновление до версии 1.10

    ver 1.10 - 2014 - в связи с отвязкой библиотеки Collection от функий из Monkeys - Monkeys.jsx...
  3. Обновление до версии 1.05

    Масштабное обновление MVC; добавлен файл примера - SnpMVC_SimpleApplication.jsx