Одна из причин, по которой я люблю Javascript, заключается в его объектно-ориентированном подходе к разработке приложений. Объектно-ориентированное программирование использует автономные фрагменты кода, известные как классы (в большинстве языков программирования ООП) и методы (в программировании JS), для создания приложений. Объектно-ориентированное программирование (ООП) рассматривает объекты как набор объектов, которые работают вместе, а не отдельные функции, которые вызываются произвольно. Эта парадигма ООП легла в основу библиотечной оптимизации нашего SDK Imperio, что позволило другим разработчикам легко использовать функции мобильного клиента для взаимодействия с настольным браузером.

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

const Imperio = {}

Затем на объекте Imperio мы создали несколько методов, которые извлекали функции из мобильных клиентов: Tap(), Swipe(), Pinch(), Accelerometer(), Gyroscope().

// take a tap event and emit the tap event
imperio.mobileTapShare = require(‘./Mobile/mobileTapShare.js’);

// sets up listener for motion data and emits object containing x,y,z coords
imperio.mobileAccelShare = require(‘./Mobile/mobileAccelShare.js’);

// sets up a listener for location data and emits object containing coordinates and time
imperio.mobileLocationShare = require(‘./Mobile/mobileLocationShare.js’);

// take a swipe event and emits that to server/desktop: swiperight,swipeleft,swipeup,swipedown
// This is done with the help of HammerJS
imperio.mobileSwipeShare = require(‘./Mobile/mobileSwipeShare.js’);

// sets up a listener for orientation data and emits object containing alpha, beta, and gamma data
imperio.mobileGyroShare = require(‘./Mobile/mobileGyroShare.js’);

Функции были разделены на свои собственные модули, поэтому каждый метод был назначен методу require(). Это помогло нам разделить наш код на модули, упорядочить кодовую базу и улучшить рабочий процесс, поскольку мы могли выбирать конкретные методы для работы, не создавая конфликтов git в одном основном файле. Вот как будет выглядеть отдельный модуль

// Attach to a tappable element and it will emit the tap event.
// Accepts 3 arguments:
// 1. The socket you would like to connect to as the first parameter.
// 2. Accepts a room name that will inform the server which room to emit the tap event to.
// 3. A callback function that will be run every time the tap event is triggered.
const mobileTapShare = (socket, room, callback) => {
  socket.emit('tap', room);
  if (callback) callback();
};
module.exports = mobileTapShare;

Метод mobileTapShare, созданный для объекта Imperio, подключается к вышеприведенному модулю через файл module.exports. Первоначально созданный для Node, module.exports стал настолько важным, что был реализован на стороне браузера. Чтобы узнать больше о модулях Javascript для браузера: https://www.sitepoint.com/javascript-modules-bundling-transpiling/

Все различные методы нашего объекта Imperio имели свой собственный модуль. В большом приложении это может стать огромным количеством файлов. Эти модули были скомпилированы с помощью Webpack, который является модным инструментом для сборки. После использования веб-пакета и объединения всех наших ресурсов вместе мы получили два файла: imperio.js и imperio.min.js. Последний является «уменьшенной» версией первого.

Если бы разработчик хотел использовать наши методы, все, что ему нужно было бы сделать, это указать путь к уменьшенной версии Imperio в виде скрипта в своем html, например:

<html>
 <head>

 </head>
<body>

</body>

 <script src=’./dist/imperio.min.js’></script>
 
</html>

И вуаля! Вот как вы настроите библиотеку внешнего интерфейса, которую могут импортировать и использовать другие разработчики. А теперь иди и построй что-нибудь крутое.