使用CommonJS时如何存储应用程序范围的变量?

时间:2013-02-18 13:04:33

标签: titanium require cart commonjs

我正在使用Titanium开发应用程序并尝试实现CommonJS方法。我喜欢模块化设置,但我想知道如何最好地处理购物车之类的东西:临时的,用户创建的数据,需要持续应用程序的生命周期。

我可以看到三种方法: 1.为这样的购物车创建一个特殊模块。它将在第一次需要()d时创建,您可以通过require()从这些模块访问任何其他模块的当前状态的购物车。

  1. 将准全局Cart对象传递给需要它的每个模块。这违反了CommonJS的文字和精神。

  2. 使用Ti.App.Properties将购物车存储在本地存储器中。这样,即使用户退出应用程序,也会保留购物车。

  3. 对什么是最好的想法?

1 个答案:

答案 0 :(得分: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();

这会创建一种单例,它是在您第一次调用它时创建的,它会一直保留到应用程序完成(从内存中删除),或者您实现clear方法并自行清理它。你也可以使用这个单例来保存数据,这取决于你要实现的部分。它与你的第一个想法类似。

您的第二个想法有几个缺点,因为数据访问不会封装到模块中,并且数据始终保持不变,因此您需要检测数据是否过时,是否可以删除。

最后,这取决于你的任务。您是否需要持久存储,您应该将模块与数据库结合使用。您是否仅在运行时需要此信息,模块就足够了。