Commit a88c57cc authored by Borodin Dmitriy's avatar Borodin Dmitriy

1. Релазовал описание к архитектуре зависимостей на уровне NPM.

parent 07c65347
# software-development-methodology
# Методология разработки программного обеспечения
[Schematic diagram of dependencies on package layer](./docs/schematic_diagram_of_dependencies_on_package_layer.md)
[Схематичная диаграмма зависимостей на уровне NPM пакетов](./docs/schematic_diagram_of_dependencies_on_package_layer.md)
[Schematic diagram of dependencies for home-tracker on package layer](./docs/schematic_diagram_of_dependencies_for_home_tracker_on_package_layer.md)
[Схема зависимостей проекта home-tracker на уровне NPM пакетов](./docs/schematic_diagram_of_dependencies_for_home_tracker_on_package_layer.md)
[Structure diagram on applycation layer front-end](./docs/structure_diagram_on_applycation_layer_front_end.md)
......
# Schematic diagram of dependencies for home-tracker on package layer
# Схема зависимостей проекта [**home-tracker**](https://gitlab.com/home-tracker) на уровне NPM пакетов.
На данном примере я объясню какие роли выполняют пакеты в данной системе.
![Schematic diagram of dependencies for home-tracker on package layer](../static/schematic_diagram_of_dependencies_for_home_tracker_on_package_layer.png)
![Схема зависимостей проекта home-tracker на уровне NPM пакетов.](../static/schematic_diagram_of_dependencies_for_home_tracker_on_package_layer.png)
## Libraries
- [@borodindmitriy/vendors]() - Пакет несущий в себе DLL с внешними зависимостями.
\ No newline at end of file
### Пакеты который не относятся к предметной области [**home-tracker**](https://gitlab.com/home-tracker):
- [@borodindmitriy/vendors](https://gitlab.com/mitya-borodin/base-code/tree/master/packages/vendors) - Содержит DLL с внешними зависимостями.
- [@borodindmitriy/interfaces](https://gitlab.com/mitya-borodin/base-code/tree/master/packages/interfaces) - Содержит общие интерфейсы.
- [@borodindmitriy/utils](https://gitlab.com/mitya-borodin/base-code/tree/master/packages/utils) - Содержит утилитарные функции.
- [@borodindmitriy/isomorphic](https://gitlab.com/mitya-borodin/base-code/tree/master/packages/isomorphic) - Содержит интерфейсы, классы, функции которые работают как в браузерной среде так и в среде nodejs.
- [@borodindmitriy/front-end-lib](https://gitlab.com/mitya-borodin/base-code/tree/master/packages/front) - Содержит интерфейсы, классы, функции которые работают только браузерной среде.
Данные пакеты являются повторно используемыми наработками. Реализованы как самостоятельный NPM пакеты. Так как используется NPM то пакеты получили версии и возможность установки через пакетный менеджер, что очень удобно.
Как и любые Library поставляется как NPM пакеты.
### Пакеты которые относятся к предметной области [**home-tracker**](https://gitlab.com/home-tracker):
#### [**home-tracker-external**](https://gitlab.com/home-tracker/external)
1. [Архитектуру сущностей в приложении](https://gitlab.com/home-tracker/external/tree/master/src/architecture)
* Интерфейсы и Классы описывают сущности.
* Классы превращают данные полученные через транспорт (HTTP, WebSocket, ...) в экземпляры сущностей, как на клиенте так и на сервере.
* Классы реализую поведение сущностей.
2. Может содержать набор [helpers, utils, enums, lists](https://gitlab.com/home-tracker/external/tree/master/src).
Причем данный пакет работает как в браузерной среде так и в nodejs.
Как и любая Library поставляется как NPM пакет.
#### [**home-tracker-ui**](https://gitlab.com/home-tracker/ui)
Реализует только композиции пользовательского интерфейса. Абсолютно не содержит логики работы, все необходимые значения приходят через **props**. В данном случае экспортирует страницы целиком. Содержит код реализующий композиции, файлы (images, fonts, audio, ...).
Как и любая Library поставляется как NPM пакет.
## Application ( [**front-end**](https://gitlab.com/home-tracker/front-end) )
Это Application, конечная реализация бизнесс требований.
Как видно из диаграммы зависит от множества Libraries.
Все Libraries подключаются непосредственно в браузер, webpack собирающий [**front-end**](https://gitlab.com/home-tracker/front-end) считает все внешние зависимиости как [**externals**](https://webpack.js.org/configuration/externals/#src/components/Sidebar/Sidebar.jsx), таким образом достигается скорость сборки/пресборки.
Сбор информации о том какие файлы и в каком порядке нужно подключить в index.html, а так же работу по перекладываю **бандлов зависимостей** берет на себя [**rearguard**](https://www.npmjs.com/package/rearguard).
Таким образом разрабатывая приложение, всегда имеется возможность выделить часть реализации как NPM пакет и во-превых перестать тратить время на сборку, во-вторых получить версионирование части реализации, в-третих возможнсть контролировать доступ к исходникам в отделных репозиториях.
На этом описание архитектуры на уровне NPM пакетов считаю законченым.
Если у вас есть вопросы то прошу писать [**мне**](https://borodin.site), либо в [**issues**](https://gitlab.com/home-tracker/front-end/issues).
\ No newline at end of file
# Schematic diagram of dependencies on package layer
# Схематичная диаграмма зависимостей на уровне NPM пакетов
![Schematic diagram of dependencies on package layer](../static/schematic_diagram_of_dependencies_on_package_layer.png)
![Схематичная диаграмма зависимостей на уровне NPM пакетов](../static/schematic_diagram_of_dependencies_on_package_layer.png)
## Library
......@@ -14,7 +14,7 @@
**Libraries** могут зависеть от дугих **Libraries**, и соответственно могут являться зависимостями.
**Application** может зависить от любой **Library**.
От **Application** никто не может зависеть это конечная точка в цепочке зависимостей.
- Library ( 1 ) ----- Library ( N ) - описывает N множество Libraries.
- Application ( 1 ) ----- Application ( N ) - описывает N множество Applications.
Далее я предлагаю взглянуть на [**диаграмму зависимостей**](./schematic_diagram_of_dependencies_for_home_tracker_on_package_layer.md) проекта [**home-tracker**](https://gitlab.com/home-tracker).
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment