Наиболее распространенный шаблон для реализации настраиваемой переменной области видимости модуля - PullRequest
0 голосов
/ 28 марта 2019

Я пишу клиент для общения с API сервера в JavaScript. У меня фон ООП, но я пытаюсь использовать современный EcmaScript.

Итак, я начал с этого:

customerApi.js:

const baseUrl = "http://myapi";
export const getCustomers = () => { /* get customer code */ }
export const addCustomer = cust => {}
export const deleteCustomer = id => {}

Все функции используют baseUrl.

Теперь я хочу провести рефакторинг, чтобы код, использующий customerApi.js, устанавливал / передавал в baseUrl, и единственные способы, которые я нашел, - это

сделать это классом:

export default class customerApi {
  constructor(baseUrl) {
   this._baseUrl  baseUrl;
  }
}

Передайте его в каждый метод:

export const getCustomers = (baseUrl) => { /* get customer code */ }
export const addCustomer = (baseUrl,cust) => {}
export const deleteCustomer = (baseUrl,id) => {}

Обертывание в функции:

const moduleFn = baseUrl => (
  return {
    getCustomers: () => { /* get customer code */ }
    addCustomer: (cust) => {}
    deleteCustomer: (id) => {}
  }
)
export default moduleFn;

Это всего лишь примеры. Каков наиболее распространенный шаблон для реализации «устанавливаемой» переменной в модуле?

1 Ответ

1 голос
/ 28 марта 2019

Я бы пошел с функциональным подходом

export default function(baseUrl){

  return Object.freeze({
    getCustomers: () => { /* get customer code */ }
    addCustomer: (cust) => {}
    deleteCustomer: (id) => {}
  })

}

Это потому, что все функции имеют замыкание на baseUrl и никакой дополнительной работы не требуется.

Код клиента может просто

import yourmodule from 'yourmodule';
var derp = yourmodule('www.derp.com')

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