Skip to content

Общая архитектура

Vladimir Zakharov edited this page Apr 27, 2016 · 8 revisions

Общая архитектура проекта

В проекте используется система сборки Maven. В корневой директории qreal-web лежит pom файл, в котором прописаны имеющиеся приложения-модули и общие для них настройки и зависимости.

Серверная часть

У каждого приложения своя собственная серверная часть, т.к. код в этих частях практически не пересекается.

Клиентская часть

Общая кодовая база содержится в приложении SharedResources. Остальные приложения используют скомпилированный в этом приложении код как стороннюю библиотеку. Скомпилированные в SharedResources библиотеки при сборке кладутся в папку https://github.com/qreal/qreal-web/tree/master/SharedResources/out. Также в это папке лежат и написанные файлы описания интерфейса библиотеки (.d.ts файлы). Так, например, основной код редактора диаграмм компилируется в фалй diagram-core.js, и имеется файл описания интерфейса diagram-core.d.ts.

Имеется 2 способа работы с кодом из SharedResources:

  1. Отдельное приложение.

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

Плюсы этого подхода:

  • Удобно разрабатывать клиентскую часть, т.к. при запуске через команду tomcat7:run изменения будут подтягиваться без пересборки всего веб-приложения.

Минусы:

  • Приходится иметь собственные копии всех библиотек, изображений и других ресурсов.
  • При обновлении библиотек из SharedResources, необходимо вручную их заменить.
  1. SharedResources как Overlay

Здесь приложение SharedResources используется как overlay (https://maven.apache.org/plugins/maven-war-plugin/overlays.html). Это означает, что при сборке war-архива разрабатываемого веб-приложения, оно сольется с war-архивом приложения SharedResources. Файлы, которые есть в обоих приложениях (с одним именем и в одной директории), остаются из разрабатываемого приложения.

При сборке SharedResources командой mvn clean install, оно заносится в локальный репозиторий maven-а, и его можно использовать в зависимостях и оверлеях, что указывается в pom файлах.

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

Т.к. приложения сливаются в один war-архив, придется запускать приложение командой tomcat7:run-war, чтобы сначала собрался war-архив, который уже запустится tomcat-ом.

Плюсы:

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

Минусы:

  • Из-за того, что запускается tomcat7:run-war, клиентский код при изменении не может автоматически обновиться, поэтому при каждом изменении придется пересобирать приложение, а это не очень быстрая оперция.

Для разработки удобнее использовать первый способ, для поддержки же второй.

Оба способа работы отражены в примерах.

Приложения Robot_diagram и StepicRobotsWeb используют второй способ работы.