我应该将JSON数据封装到Javascript对象中吗?

时间:2014-05-26 20:25:37

标签: javascript json mongodb

假设您有一个服务器端Javascript应用程序,并且您从客户端收到以下数据:

[
    {
        "userId": "0001",
        "Details": [
            {
                "Name": "John",
                "Surname": "Doe",
                "bankAccount": "123"
            }
        ]
    }
]

将此数据封装到Javascript对象中是一种好习惯吗?例如,

    var Person = (function () {
    var bankAccount = "";

    function Person(userId, name, surname, bankAccount) {
        this.userId = userId;
        this.name = name;
        this.surname = surname;

        this.getBankAccount = function() {
            return this.bankAccount;
        };
        this.setBankAccount = function(ba) {
            this.bankAccount = ba;
        };
    }
    return Person;
})();

通过这种方式,我可以控制涉及用户敏感数据的操作:

   var p = new Person(1, "John", "doe", "123");
   p.name
=> 'John'
   p.bankAccount
   p.getBankAccount()
   p.setBankAccount(123)
   p.getBankAccount()
=> 123

但是,如果我需要将这些数据保存到像MongoDB这样的NoSQL数据库中,我需要将所有内容序列化为JSON,这不是很奇怪吗?我想知道你对这种做法有什么想法。

1 个答案:

答案 0 :(得分:3)

将纯JavaScript对象封装在某种界面中有几个优点,其中mehtod将getset为您的值。

实际上有很多框架可以帮助你。

Backbone

var Person = Backbone.Model.extend();
var person = new Person({id : 1, name : "Peter"});

person.get("id");
// -> 1

person.get("name");
// -> Peter

一个优点是您可以定义自己的parsing函数,这些函数将从服务器获取JSON并根据需要对其进行转换。

另一个优点是您可以使用事件将您的第12个连接到设置过程中。

person.on("change:name", function() { console.log("changed..."); });
person.set("name", "Frank");
// the change callback gets fired.

此外,您可以在需要保留数据时将对象转换回纯JavaScript对象。

// in Backbone
person.toJSON();
// -> {id:1, name:"Peter"}

如果我们在谈论服务器上的技术,那么你既不需要框架也不需要getter或setter作为函数,因为你可以使用get和{{ 1}}语法

set