mvloader

1.0.10 • Public • Published

MVLoader

Описание

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

Тестовый проект

Для более простого понимания назначения данного пакета и начала работы с ним создан тестовый проект, доступный по ссылке: https://github.com/mvoevodskiy/mvl-example-project.

Установка

npm i mvloader --save

Класс MVLoaderBase

Используется в качестве совсем базовой основы.
Подключает MVTools в качестве свойства объекта MT, упрощает загрузку конфига при создании экземпляра класса.

Полезен для большинства вспомогательных классов проекта, например, контроллеров. Большинство пакетов mvl-* экспортируют классы, унаследованные от MVLoaderBase.

Подключение в своем классе:

const {MVLoaderBase} = require('mvloader');

Свойства класса:

  • static exportConfig - экспортируемая из класса конфигурация. Используется при загрузке класса через MVLoader. Подробнее в разделе "Класс MVLoader" - "Загрузка конфигурации классов";
  • MT - экземпляр класса MVTools (вспомогательные методы);
  • caption - название объекта (экземпляра класса) при его внедрении в глобальный объект process. Подробнее в разделе "Класс MVLoader" - "Загрузка классов";
  • config - объект конфигурации.

Методы класса:

  • loadConfig(config) - загружает объект конфигурации, объединяет с загруженной ранее конфигурацией;
  • init() - метод базовой инициализации;
  • initFinish() - метод завершения инциализации. Вызывается после того, как выполнилась базовая инициализация всех подключенных в проекте классов.

Пример использования

const {MVLoaderBase} = require('mvloader');

class MvlUsersSemis extends MVLoaderBase{
    static exportConfig = {
        ext: {
            classes: {
                semis: {},
                controllers: {
                    mvlUsers: require('./controllers/mvluserscontroller'),
                },
                handlers: {},
            },
            configs: {
                controllers: {},
                handlers: {
                    DBHandler: {
                        sequelize: {},
                        models: {
                            mvlUser: require('./models/mvlUser'),
                        }
                    }
                },
                semis: {},
            }
        },
    };

    constructor (App, ...config) {
        let localDefaults = {};
        super(localDefaults, ...config);
        this.App = App;
    }

    async init() {
        super.init();
    }

    async initFinish() {
        super.initFinish();
    }

}

module.exports = MvlUsersSemis;

Класс MVLoader

Основной класс загрузчика, который необходимо наследовать в проектах. Наследует MVLoaderBase.

Подключение в проекте:

const {MVLoader} = require('mvloader');

Свойства класса:

  • ext - объект, хранилище для инициализированных экземпляров всех подключенных классов;
  • DB - активное подключение к базе данных, если применимо;
  • services - объект для упрощенного доступа к некоторым инициализированным экземплярам подключенных классов;

Методы класса: *

Подключение классов

Загрузка классов

Все подключенные классы должны указываться в секции ext.classes конфигурации. Подключаемые пакеты и классы условно разделяются на следующие типы:

  • semis - пакеты-"заготовки", экспортирующие сразу несколько сущностей, необязательно только классы. Как правило, именно пакеты типа semis наибольшим образом расширяют конфигурацию проекта, влияя, в том числе, на конфигурации другие классов;
  • controllers - пакеты или классы, реализующие определенную логику;
  • handlers - пакеты или классы, являющиеся обертками над сторонними библиотеками.

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

Рекомендовано придерживаться такого разделения при создании новых публичных пакетов.

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

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

В примере выше (в разделе "Класс MVLoaderBase" - "Пример использования") показан экспортируемый объект конфигурации с подключенными классами и моделями БД.

Загрузка конфигурации классов

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

Пример: если подключенный класс доступен в конфигурации через ext.classes.handlers.DBHandler, то его конфигурация должна быть доступна через ext.configs.handlers.DBHandler.

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

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

"Прикрепление" экземпляров классов к process

Если в классе есть непустое свойство caption, то экземпляр данного класса будет доступен через process[caption]. Такой прием использован для значительного упрощения поиска методов по их строковому пути.

К примеру, в классе mvlUsersController свойство caption имеет значение mvlUsers, а в классе определен метод isRegistered. Тогда получить данный метод для последующего выполнения будет возможно так:

let method = this.MT.extract('mvlUsers.isRegistered');
if (method) {
    return method();
}

Readme

Keywords

none

Package Sidebar

Install

npm i mvloader

Weekly Downloads

4

Version

1.0.10

License

ISC

Unpacked Size

21.3 kB

Total Files

5

Last publish

Collaborators

  • mvoevodskiy