我爱上了json,并且痴迷于json。我正在使用node.js和mongodb,我被两种不同的哲学所困扰。
一
{
"app":{
"keys":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"3241bly5vlv1l2hjv51",
"sharedsecret":"gxdz1n25f1m235xm1235",
}
}
}
}
二
{
"app":{
"keys":{
"facebook_apikey":"1412v5l1v5jv5j1h2v5",
"facebook_sharedsecret":"v5j12hv51hc4v123vmnv",
"twitter_apikey":"3241bly5vlv1l2hjv51",
"twitter_sharedsecret":"gxdz1n25f1m235xm1235",
}
}
}
3甚至
{
"app":{
"facebook_apikey":"1412v5l1v5jv5j1h2v5",
"facebook_sharedsecret":"v5j12hv51hc4v123vmnv",
"twitter_apikey":"3241bly5vlv1l2hjv51",
"twitter_sharedsecret":"gxdz1n25f1m235xm1235",
}
}
使数据更加复杂
{
"app":{
"keys":{
"facebook":{
"production":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"development":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
},
"twitter":{
"production":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"development":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
}
}
}
}
或者
{
"app":{
"keys":{
"production":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
},
"development":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
},
}
}
}
你应该走多深?有什么东西是太远了还是太远了?
最佳答案
我会用下面的方法,事实上确实用了类似于下面的方法:
{
"app":{
"production":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
},
"development":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
}
}
}
当我设计一个系统时,我寻找创建处理多个不同情况的公共代码。这通常意味着在设计中创建一致性。
上面允许您创建一个找到“app”的例程,然后选择一个操作环境,或者是“production”,或者是“development”。然后可以将其传递给另一个函数,并要求找到您所关心的特定服务,要么是“facebook”、“twitter”,要么是“foursquare”之类的新服务。然后,单个oauth函数集可以处理授权过程,不管传入的对象是什么,因为它始终能够请求“apikey”和“sharesecret”,而不考虑使用的是哪个服务。
说到mongo甚至javascript的灵活性……我喜欢这种灵活性。它使我们能够有效地解决在其他工具集中更困难的问题。但是,如果要获得代码效率和调试的方便性,则需要尽可能地以一致性来调整这种灵活性。