ToPJS (Technology of Pure Java Script) - технология чистого JavaScript

Цели использования ToPJS

ToPJS (Technology of Pure Java Script) — технология чистого JavaScript. Есть три "кита", на которых основана ToPJS:

  1. Объектно-ориентированный код JavaScript, практически полностью исключающий хранение каких-либо данных и функций вне объектов.
  2. Отделение JavaScript от HTML-кода. Исполняемый JavaScript-код полностью находится в отдельных файлах, а связующий с HTML JavaScript-код находится в специально отведенных местах HTML-кода (см. ниже).
  3. Обработка событий только через подписку. Функции обратного вызова (прописанные в атрибутах тега) не используются.

Данная технология направлена на применение в сложных web-проектах. С одной стороны, технология позволяет специализировать разработчиков по различным направлениям (серверное программирование, HTML+CSS, JavaScrip и т. д.) и сделать работу JavaScript-разработчика максимально независимой от других. С другой стороны, поскольку весь JavaScript практически целиком находится в отдельных файлах, упрощается модификация web-проекта при необходимости доработки существующего JS-кода.
Кроме того, принципы ToPJS позволят различным JavaScript у одного объекта независимо обрабатывать одни и те же события. Например, обработка события "onload", используемого разработчиками в своих скриптах, не вызовет взаимных конфликтов. Хранение всех данных внутри объектов сводит к минимуму конфликты между различными JavaScript используемыми на странице.

Принципы построения ToPJS

ToPJS пропагандирует жесткую структуру HTML-кода, которую можно кратко описать такой схемой:

<head> <title>...</title> <style type="text/css"> ..... </style> <script type="text/javascript" src="file1.js"></script> <script type="text/javascript" src="file2.js"></script> ..... <script type="text/javascript" src="fileN.js"></script> <script type="text/javascript"> // Initialization of JavaScript-objects </script> </head> <body> BODY-code <script type="text/javascript"> // Initialization of JavaScript-objects </script> </body>

Подключение JavaScript-файлов

Подключение всех JavaScript-файлов происходит в заголовке страницы. Код, содержащийся в них, представляет собой набор объектов, которые в момент подключения никак не инициализируются. Файл/файлы включают в себя весь JavaScript-код, используемый на странице, за исключением инициализации.

Для каждой задачи - отдельный файл

Объект, размещенный внутри файла, должен в комплексе решать какую-либо задачу. Не следует размещать в одном файле несколько объектов, решающих разные задачи (это требование должно применяться, по крайней мере, к исходным кодам на этапе проектирования, а в рабочей версии все объекты могут быть обработаны обфускатором и слиты в один файл).
Даже если для комплексного решения отдельной задачи требуется обращение к разным фреймам или окнам, управление этими фреймами/окнами должно выполняться из одного JavaScript-объекта.

Типы объектов и способы их инициализации

Инициализация может выполняться двумя способами, в зависимости от типов подключенных объектов:

Обработка событий

Информация, полученная при инициализации (id-тегов и т. п.), используется для поиска элементов html-кода и подписки на события. Таким образом, получаем чистый html-код, свободный от JavaScript, в том числе и в атрибутах тегов. Различные JavaScript могут независимо подписываться на события html-объектов.

Расположение инициализирующего кода

Как видно из схемы, инициализацию JavaScript-объектов рекомендуется выполнять либо сразу после подключения JavaScript-файлов, либо в конце тега body:

И у того, и другого способа есть свои достоинства и недостатки. Выбор способа инициализации зависит от поставленной задачи.

Связь с CSS

Инициализация JavaScript-объектов выполняется после определения всех CSS, чтобы обеспечить бесконфликтное использование CSS в JS.

Использование констант

Принципы ToPJS не рекомендуют использование констант в теле JavaScript-кода. Часть константной информации передается при инициализации, как описано выше. Это, как правило, информация, целиком связанная с используемым html-кодом или с другими, часто изменяемыми параметрами.
Но в JavaScript возможны такие константы, которые не меняются в рамках одного проекта, но могут быть изменены при использовании этого скрипта в другом проекте. Такого типа константы выносятся в свойства отдельного объекта, который, в свою очередь, является свойством основного объекта (например, "config") и располагается в конце кода подключаемого файла. Этот принцип существенно упрощает смену константных параметров.

Заключение

ToPJS является революционной (не побоюсь этого слова) технологией - она полностью ломает старые принципы построения JavaScript. Скорее всего, при взгляде на JavaScript-коды приведенные на этом сайте, они покажутся Вам непривычными и, может быть, сложными. Но, попробовав хоть раз эту технологию на практике, вы поймете ее удобство и уже вряд ли от нее откажитесь. В наше время web-проекты становятся все более динамичными - все больше исполняемого кода переносится на клиентскую сторону. В некоторых проектах JavaScript по объему и сложности уже превышают серверную часть программного кода. Вот на такие проекты и направлен ToPJS - он позволяет четко структурировать разрабатываемые JavaScript и сделать их работу максимально бесконфликтной.

Тем не менее, все изложенные выше принципы являются настоятельной рекомендацией для решения большинства задач, но не догмой. Если поставленная Вам задача не может быть решена по этим принципам, вы можете отходить от них. Например, произвести инициализацию можно в два этапа (вызовом не одного, а двух методов). Можно расположить инициализацию в середине кода body и т.п.
Но помните, что чем жестче Вы будете следовать принципам ToPJS, тем легче будет работать с Вашим кодом другим программистам или лично Вам, при последующей правке этого кода.


Технология находится сейчас в стадии развития и совершенствования. В настоящее время технология основана на использовании JS-wrapper. Возможно все изложенное выше Вам будет проще понять, взглянув на примеры использовании JS-wrapper построенные по принципам ToPJS.



Материалы статьи разрешается использовать в соответствии с лицензией GNU FDL.