EventDriven NodeJS Архитектура приложения с хуками жизненного цикла - PullRequest
0 голосов
/ 29 апреля 2020

У меня общий вопрос о разработке Nodejs приложения с собственными жизненными циклами и событиями для отслеживания нескольких видов деятельности во всем мире.

Что мне нужно?

Любой

  • Ссылки
  • Советы и рекомендации
  • Чертежи
  • Фреймворки

Фон

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

Я исследовал Libs, что, кажется, замечательно, но мне нужно знать, на правильном ли я пути.

Вот недавний бэкэнд, который я хочу обновить с core:

@ fractools / node

Цель

Узел должен быть более абстрактным и ориентированным на события, чтобы отслеживать действия более глобально для процесса отверстия ,

Я думал о модуле ядра, который определяет основу для событий и хуков, которые слушают процесс приложения дырки.

Таким образом, другие модули, такие как обработка базы данных или аутентификация и т. Д. c, могут быть обернуты в нее.

Мои вопросы

Как мне иметь помощника, такого как регистратор активности, который прослушивает сквозное приложение, так что мне не нужно импортировать регистратор в каждом действии? Является ли это возможным? Имеет ли это какой-то смысл?

Пример Case

Основной модуль отслеживает активность базы данных:

Система помещает данные в базу данных, ядро ​​прослушивает их, отслеживает и помещает эту информацию в Logger, который использует базу данных.

Issue

Я застрял, например, в одной простой вещи архитектуры:

Если у меня есть класс базы данных, и я хочу Core, который является расширенным EventErmitter, слушайте Действия с базой данных, я не могу иметь регистратор внутри Core, который использует базу данных, потому что я не могу ссылаться на эти модули одновременно:

// Core Module

const EventErmitter = require('events');
const Database = require('./database)';

module.exports = class Core extends EventEmitter {
  constructor() {
    super();

    this.logger = new Database('Logger');

    this.on('mounted', () => {
      this.logger.put('instance mounted')
    });

    this.on('putData', () => {
      this.logger.put('dataPut')
    });

    this.emit('mounted');
  }
}

// Database Module
const Core = require('./core');
const PouchDB = require('pouchdb'); // Which database lib to use is not important yet

let core = new Core();

module.exports = class Database {
  constructor(name, options) {

    this.id = generateID();
    this.name = name;
    this.created = JSON.stringify(new Date()); // TODO doubled Quotes

    this.options = options || {};

    this.db = new PouchDB(name);
    core.emits('mounted')
  }
  put(data) {
    this.db.put(data);
    core.emits('dataPut')    
  }
}

Итак, я заметил, мне нужна любая отправная точка. : s

Я посмотрел на NodeJS EventErmitter и обнаружил, что процесс NodeJS также лежит на EventErmitter.

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

Надеюсь, у некоторых из вас есть хорошие ссылки или «чертежи», которые помогают мне разработать хорошее ядро ​​для моего узла. :)

Хорошего дня и будьте в безопасности!

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...