Как хранить переменные приложения при использовании CommonJS?

Я разрабатываю приложения с использованием Titanium и пытаюсь реализовать подход CommonJS. Мне нравится модульная установка, но мне интересно, как лучше поступить с такими вещами, как корзина для покупок: временные, созданные пользователем данные, которые должны храниться в течение всего срока службы приложения.

Я вижу три подхода: 1. Создать специальный модуль для такой Корзины. Он будет создан при первом вызове require(), и вы сможете получить доступ к корзине в ее текущем состоянии из любого другого модуля, выполнив require() из этих модулей.

  1. Передайте квазиглобальный объект Cart каждому модулю, который в нем нуждается. Это противоречит букве и духу CommonJS.

  2. Сохраните корзину в локальной памяти с помощью Ti.App.Properties. Таким образом, корзина сохраняется, даже когда пользователь выходит из приложения.

Есть мысли, что будет лучше?


person Wytze    schedule 18.02.2013    source источник


Ответы (1)


Я бы предпочел создать модуль CommonJS следующим образом:

function ShoppingCart(options) {
    // do some setup for the shopping cart
}

ShoppingCart.prototype.add(product, qty)
    // add product to cart
}

ShoppingCart.prototype.remove(product, qty)
    // remove product from cart
}

ShoppingCart.prototype.clear()
    // empty cart (and create new, empty one)
}

// etc.

ShoppingCart = new ShoppingCart();

module.exports = ShoppingCart;

Как получить доступ?

var Cart = require('path/to/ShoppingCart');
Cart.add();
Cart.remove();
Cart.clear();

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

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

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

person mr.VVoo    schedule 18.02.2013