【问题标题】:How to store app-wide variables when using CommonJS?使用 CommonJS 时如何存储应用程序范围的变量?
【发布时间】:2013-02-02 22:16:44
【问题描述】:
我正在使用 Titanium 开发应用程序并尝试实现 CommonJS 方法。我喜欢模块化设置,但我想知道如何最好地处理诸如购物车之类的事情:临时的、用户创建的数据,需要在应用程序的整个生命周期中持续存在。
我可以看到三种方法:
1. 为这样的购物车创建一个特殊模块。它将在第一次被 require()d 时创建,您可以从任何其他模块通过 require() 来访问处于当前状态的购物车。
将准全局 Cart 对象传递给需要它的每个模块。这违反了 CommonJS 的文字和精神。
使用 Ti.App.Properties 将购物车存储在本地内存中。这样,即使用户退出应用,购物车也会保留。
对什么是最好的有什么想法?
【问题讨论】:
标签:
titanium
require
cart
commonjs
【解决方案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 方法并自行清理它。你也可以使用这个单例来持久化数据,这取决于你要实现哪些部分。这与您的第一个想法相似。
您的第二个想法有几个缺点,因为数据访问未封装到模块中,并且数据始终保持不变,因此您需要检测它是否旧并且可以删除。
最后,这取决于您的任务。您是否需要持久存储,您应该将模块与数据库结合起来。是不是只在运行时才需要这些信息,模块就够了。