Javascript / Express - экспортирует все методы против экспорта класса, содержащего методы - PullRequest
0 голосов
/ 18 декабря 2018

Я в замешательстве, когда сталкиваюсь с таким пропущенным вопросом, как, как они отличаются?

Module.exports = {
  search_companies(req, res) {
    //some ops
  },

  get_details(req, res) {
    //some ops
  }
};

против

class MainContrller {

  search_companies(req, res) {
      //some ops
    },

    get_details(req, res) {
      //some ops
    }
}

module.exports.MainController = MainController;

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Модуль должен использоваться как:

const { search_companies } = require('...');

Класс должен использоваться как:

const { MainController } = require('...');
const { search_companies } = new MainController();

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

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

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

0 голосов
/ 18 декабря 2018

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

Второй экспортирует класс MainController с функциями search_companies и get_details.Здесь вы должны создать экземпляр MainController, чтобы иметь возможность вызывать эти две функции в экземпляре.

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

И вы используете второй, если вам нужно несколько разных экземпляров MainController.

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