Как обеспечить корректный граф зависимостей в моей архитектуре приложения - PullRequest
0 голосов
/ 06 февраля 2019

tl; dr:

Можно ли подтвердить / гарантировать (используя библиотеку или что-то еще), что файл .js будет иметь доступ только к определенному подмножеству модулей?

Например: если файл .js находится в папке /controllers, ему разрешено иметь доступ только к определенным глобальным модулям (например, express) и импортировать из определенных папок (например: ../repositories).,Все, что находится вне этого списка, не разрешено

Обоснование:

В большом проекте со многими разработчиками почти неизбежно, что кто-то вторгается в слои.Например: в рамках действия контроллера MVC получите доступ к базе данных через драйвер db / SQL без прохождения через репозиторий или более упрощенную абстракцию .

const express = require('express');
const router = express.Router();
const pg = require('pg');
const path = require('path');
const connectionString = process.env.DATABASE_URL;

router.get('/api/v1/todos', (req, res, next) => {
  const results = [];
  pg.connect(connectionString, (err, client, done) => {
    const query = client.query('SELECT * FROM items ORDER BY id ASC;');
    query.on('row', (row) => { results.push(row); });
    query.on('end', () => {
      done();
      return res.json(results);
    });
  });
});

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

Я знаю, что часть проблемы решается с помощьюкомандная тренировка, но мне интересно, есть ли способ систематически усиливать это.Возможно, что-то похожее на no-limited-import или no-limited-modules в ESLint.

edit:

  • Ссылки ESLint.
...