Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

Принципы разработки: различия между версиями

Материал из Платформа Эра. Документации
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
  Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
  Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
<blockquote>
'''Дальнейшие статьи курса расчитаны на наличие опыта в разработке приложений и сервисов. Крайне желательно наличие опыта разработки на языке TypeScript и работе с NodeJS.'''</blockquote>


= Общая информация =
= Общая информация =
Строка 10: Строка 15:
В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. [https://ru.wikipedia.org/wiki/SOLID_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) SOLID]).
В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. [https://ru.wikipedia.org/wiki/SOLID_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) SOLID]).


Более полную архитектуру платформы и её модулей можно найти в [[Архитектура платформы|соответствующей статье]].
Более полную архитектуру платформы и её модулей можно найти в [[Архитектура платформы|соответствующей статье]].<blockquote>Для применения изменений, связанных с серверным кодом, необходимо применять изменения в пакете. В отличии от изменений классов, контролов и остальных сущностей, требуется деактивация и повторная активация пакета в приложении Builder. При использовании функции Apply, сервисы и некоторые другие элементы пакета не будут перезапущены, соответственно в таком случае изменения не будут применены.</blockquote>


= Применение TS-кода в No-Code редакторах =
= Применение TS-кода в No-Code редакторах =
[[Файл:Переопределение TypeScript-методов в классе.png|мини|Переопределение методов в редакторе класса]]
=== Переопределение методов ===
Платформа предлагает широкие возможности по модификации логики объектов с помощью переопределения некоторых TypeScript-методов в редакторах объектов. Переопределен может быть как серверный, так и клиентский код.
В случае использования данного инструмента, в соответствующие поля необходимо вносить тело метода, платформа при применении изменений в пакете автоматически создаст всю необходимую обвязку данного метода и задаст указанный код в качестве его тела.
Переопределенные клиентские методы будут автоматически применены в сгенерированном системой контроле.
Методы, доступные для переопределения в редакторах:
{| class="wikitable"
|+Методы, доступные для переопределения
!Имя объекта
!Имя метода
!Контекст исполнения
!Комментарий
|-
| rowspan="9" |Класс
|afterApplyUpdatesCode
|Серверный
|Метод вызывается после применения изменений в данных объекта класса
|-
|beforeInsertCode
|Серверный
|Метод вызывается перед добавлением нового объекта класса
|-
|beforeModifyCode
|Серверный
|Метод вызывается перед изменением данных объекта класса
|-
|beforeDeleteCode
|Серверный
|Метод вызывается перед удалением объекта класса
|-
|autoCalcCondition
|Серверный
|
|-
|doubleClickCode
|Клиентский
|
|-
|autoFocusConditionCode
|Клиентский
|
|-
|beforeInitCode
|Клиентский
|Метод вызывается перед инициализацией контрола в браузере
|-
|afterInitCode
|Клиентский
|Метод вызывается после инициализации контрола в браузере
|-
|Класс/DataProperty
|beforeSetCode
|Серверный
|Метод вызывается перед установкой нового значения в свойство объекта класса
|-
|
|afterSetCode
|Серверный
|Метод вызывается после установки нового значения в свойство объекта класса
|-
|
|dynamicEditorCode
|Клиентский
|
|-
|
|visibilityConditionCode
|Клиентский
|Метод, определяющий видимость свойства класса. Должен возвращать true или false
|-
|
|readOnlyConditionCode
|Клиентский
|Метод, определяющий доступность свойства класса для редактирования. Должен возвращать true или false
|-
|
|dynamicFilterCode
|Клиентский
|
|-
|
|afterValueChangedCode
|Клиентский
|Метод вызывается после измнеения значения свойства класса (на клиенте)
|-
|
|validationCode
|Клиентский
|Метод вызывается после изменения значения свойства, для его валидации. Должен возвращать true или false
|}
=== Действия классов ===
[[Файл:Действие класса.png|мини|Действие класса]]
Одна из важных возможностей реализации бизнес-логики объектов - это действия классов. Набор действий задается в коллекции Actions каждого класса.
Действие может выполняться как в серверном так и в клиентском контексте. Платформа не накладывает ограничений на логику работы действий, таким образом в действии может быть заложена сложная логика обработки данных класса, взаимодействий с другими модулями и сервисами системы, а так же внешними интеграциями.
Детально работа действий будет рассмотрена в одной из следующих статей.
=== Обработчики классов ===
[[Файл:Редактор обработчика.png|мини|Редактор обработчика]]
Обработчики (Handlers) это объект пакета, который служит для обработки событий классов.
Обработчик предназначен для выполнения каких-либо действий во время операций insert/modify/delete в любых классах (в том числе из других пакетов, включая системные). Если обработчик возвращает строковое сообщение об ошибке либо false, операция отменяется.
Включенные обработчики активных пакетов выполняются в порядке заданного приоритета после родных методов класса (заданных в свойствах класса beforeInsertCode, beforeModifyCode, beforeDeleteCode).
Детальному обзору обработчиков посвящена следующая статья курса.


= Разработка в файловой системе =
= Разработка в файловой системе =
[[Файл:Сервисы. Исходный код.png|мини|Сервисы. Исходный код]]
В рамках платформы, допускается разработка в файловой системе '''сервисов''' пакета.
После создания сервиса и переактивации пакета, система сгенерирует исходный код и обвязку для сервиса. В разделе '''Services''', в колонке ''sourceCode'' можно скачать архив исходных кодов для разработки сервиса.
Архив будет содержать набор классов-обёрток всех пакетов системы, а так же исходные коды сервиса.
Так как все классы-обёртки генерируются системой автоматически, не рекомендуется вносить в них изменения, кроме как для отладки при запуске сервиса на компьютере разработчика. Данный функционал используется для удобства разработки сервисов и применения функционала современных IDE.
Для разработки и отладки сервисов, необходимо наличие на компьютере разработчика NodeJS v14 и npm v6.
В качестве среды разработки подходит Visual Studio Code или любая другая современная IDE.
Разработке сервисов в дальнейшем курсе будет посвящено несколько отдельных статей.


= Запуск TS-модулей и отладка =
= Запуск TS-модулей и отладка =
[[Файл:Справка сервисов.png|мини|Справка сервисов]]
Инструкцию по запуску сервисов можно всегда найти в справке раздела Services.
Общий подход к работе с сервисами на локальной машине следующий:
# Создать в пакете серверный сервис
# Активировать пакет
# Отключить микросервис в приложении Настройки, раздел Прочее. Данное действие необходимо для того, чтобы запущенный сервис не конфликтовал с системным. На время разработки, сервис поднимаемый платформой отключается, и его будет замещать отладочный экземпляр сервиса разработчиком
# Включить в таблице Services отображение столбца sourceCode
# Скачать и распаковать zip-архив
# [[Файл:Микросервисы в приложении Настройки.png|мини|Микросервисы в приложении Настройки]]Установить на компьютер NodeJS v14 и npm v6, Visual Studio Code либо аналогичную IDE
# В файле package.json в строке build:live указать актуальные адрес сервера, имя домена и токен. Доступы настраиваются в приложении Настройки, раздел Прочее, Каналы интеграции. Для отладки можно использовать доступ product_layer, однако рекомендуется создать отдельный токен доступа с необходимыми правами. 
# Выполнить npm ci
# Выполнить npm start
# Открыть папку src в IDE


Запущенный сервис контролируется утилитой nodemon, и при изменении исходных кодов, сервис будет автоматически перезапускаться, применяя необходимые изменения.


Более подробно про отладку и работу сервисов будет расказанно в дальнейших статьях курса.
  Следующая статья курса: [[Обработчики данных]]
  Следующая статья курса: [[Обработчики данных]]


  Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
  Предыдущая статья курса: ''[[Задание 7. Создание служебного сценария]]''
[[Категория:Курс "Разработка приложений"]]
[[Категория:Курс "Разработка приложений"]]

Текущая версия от 18:37, 13 марта 2025

Предыдущая статья курса: Задание 7. Создание служебного сценария


Дальнейшие статьи курса расчитаны на наличие опыта в разработке приложений и сервисов. Крайне желательно наличие опыта разработки на языке TypeScript и работе с NodeJS.

Общая информация

Любое приложение на платформе эра состоит из набора пакетов. При переходе от No-Code разработки к разработке с помощью кода этот подход не меняется.

Все объекты пакета, созданные с помощью No-Code редакторов, преобразуются механизмами платформы в набор классов. Большинство классов не доступно для редактирования внешними средствами. Исключение составляют сервисы пакета, для них доступно полное изменение исходного кода и его замена.

Разработка приложений на платформе эра выполняется с помощью языка TypeScript. В большинстве случаев, можно выбрать контекст исполнения кода - он может быть клиентский (в браузере) или серверный (на сервере приложений продуктового слоя). В случае использования серверного контекста, код будет исполняться при помощи NodeJS версии 14.Х.

В рамках платформы, при разработке, применяется принцип разделения интерфейсов (см. SOLID).

Более полную архитектуру платформы и её модулей можно найти в соответствующей статье.

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

Применение TS-кода в No-Code редакторах

Переопределение методов в редакторе класса

Переопределение методов

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

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

Переопределенные клиентские методы будут автоматически применены в сгенерированном системой контроле.

Методы, доступные для переопределения в редакторах:

Методы, доступные для переопределения
Имя объекта Имя метода Контекст исполнения Комментарий
Класс afterApplyUpdatesCode Серверный Метод вызывается после применения изменений в данных объекта класса
beforeInsertCode Серверный Метод вызывается перед добавлением нового объекта класса
beforeModifyCode Серверный Метод вызывается перед изменением данных объекта класса
beforeDeleteCode Серверный Метод вызывается перед удалением объекта класса
autoCalcCondition Серверный
doubleClickCode Клиентский
autoFocusConditionCode Клиентский
beforeInitCode Клиентский Метод вызывается перед инициализацией контрола в браузере
afterInitCode Клиентский Метод вызывается после инициализации контрола в браузере
Класс/DataProperty beforeSetCode Серверный Метод вызывается перед установкой нового значения в свойство объекта класса
afterSetCode Серверный Метод вызывается после установки нового значения в свойство объекта класса
dynamicEditorCode Клиентский
visibilityConditionCode Клиентский Метод, определяющий видимость свойства класса. Должен возвращать true или false
readOnlyConditionCode Клиентский Метод, определяющий доступность свойства класса для редактирования. Должен возвращать true или false
dynamicFilterCode Клиентский
afterValueChangedCode Клиентский Метод вызывается после измнеения значения свойства класса (на клиенте)
validationCode Клиентский Метод вызывается после изменения значения свойства, для его валидации. Должен возвращать true или false

Действия классов

Действие класса

Одна из важных возможностей реализации бизнес-логики объектов - это действия классов. Набор действий задается в коллекции Actions каждого класса.

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

Детально работа действий будет рассмотрена в одной из следующих статей.

Обработчики классов

Редактор обработчика

Обработчики (Handlers) это объект пакета, который служит для обработки событий классов.

Обработчик предназначен для выполнения каких-либо действий во время операций insert/modify/delete в любых классах (в том числе из других пакетов, включая системные). Если обработчик возвращает строковое сообщение об ошибке либо false, операция отменяется.

Включенные обработчики активных пакетов выполняются в порядке заданного приоритета после родных методов класса (заданных в свойствах класса beforeInsertCode, beforeModifyCode, beforeDeleteCode).

Детальному обзору обработчиков посвящена следующая статья курса.

Разработка в файловой системе

Сервисы. Исходный код

В рамках платформы, допускается разработка в файловой системе сервисов пакета.

После создания сервиса и переактивации пакета, система сгенерирует исходный код и обвязку для сервиса. В разделе Services, в колонке sourceCode можно скачать архив исходных кодов для разработки сервиса.

Архив будет содержать набор классов-обёрток всех пакетов системы, а так же исходные коды сервиса.

Так как все классы-обёртки генерируются системой автоматически, не рекомендуется вносить в них изменения, кроме как для отладки при запуске сервиса на компьютере разработчика. Данный функционал используется для удобства разработки сервисов и применения функционала современных IDE.

Для разработки и отладки сервисов, необходимо наличие на компьютере разработчика NodeJS v14 и npm v6.

В качестве среды разработки подходит Visual Studio Code или любая другая современная IDE.

Разработке сервисов в дальнейшем курсе будет посвящено несколько отдельных статей.

Запуск TS-модулей и отладка

Справка сервисов

Инструкцию по запуску сервисов можно всегда найти в справке раздела Services.

Общий подход к работе с сервисами на локальной машине следующий:

  1. Создать в пакете серверный сервис
  2. Активировать пакет
  3. Отключить микросервис в приложении Настройки, раздел Прочее. Данное действие необходимо для того, чтобы запущенный сервис не конфликтовал с системным. На время разработки, сервис поднимаемый платформой отключается, и его будет замещать отладочный экземпляр сервиса разработчиком
  4. Включить в таблице Services отображение столбца sourceCode
  5. Скачать и распаковать zip-архив
  6. Микросервисы в приложении Настройки
    Установить на компьютер NodeJS v14 и npm v6, Visual Studio Code либо аналогичную IDE
  7. В файле package.json в строке build:live указать актуальные адрес сервера, имя домена и токен. Доступы настраиваются в приложении Настройки, раздел Прочее, Каналы интеграции. Для отладки можно использовать доступ product_layer, однако рекомендуется создать отдельный токен доступа с необходимыми правами.
  8. Выполнить npm ci
  9. Выполнить npm start
  10. Открыть папку src в IDE

Запущенный сервис контролируется утилитой nodemon, и при изменении исходных кодов, сервис будет автоматически перезапускаться, применяя необходимые изменения.

Более подробно про отладку и работу сервисов будет расказанно в дальнейших статьях курса.

Следующая статья курса: Обработчики данных
Предыдущая статья курса: Задание 7. Создание служебного сценария