我爱上并沉迷于JSON。我正在使用node.js和mongodb,我在两种不同的哲学之间徘徊。
1
{
"app":{
"keys":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"3241bly5vlv1l2hjv51",
"sharedsecret":"gxdz1n25f1m235xm1235",
}
}
}
}
2
{
"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",
},
},
}
}
}
你要去多深?是否存在太远或过远的事情?
答案 0 :(得分:3)
我会选择以下内容,实际上确实采用了与以下内容非常相似的内容:
{
"app":{
"production":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
},
"development":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
}
}
}
当我设计一个系统时,我寻找创建处理多种不同情况的通用代码。这通常意味着在设计中创建一致性。
以上允许您创建一个找到“app”的例程,然后选择一个操作环境,“生产”或“开发”。然后可以将其交给另一个函数,并要求找到您关注的特定服务,“facebook”,“twitter”或者像“foursquare”这样的新功能。然后,单个oAuth函数集可以处理授权过程,无论传入的对象如何,因为它将始终能够请求“apikey”和“sharesecret”,而不考虑正在使用的服务。
谈到Mongo甚至Javascript的灵活性......我喜欢灵活性。它使我们能够有效地解决其他工具集中更难解决的问题。但是,如果要提高代码效率并简化调试,那么就需要尽可能地调整灵活性。
答案 1 :(得分:2)
嗯,这取决于。
从语义上看,如果您希望将更多应用添加到该列表中,则#1更正确。如果应用列表是固定的(即总会有两个),则可以考虑#2 。但一般来说,你总是使用#1,因为它更干净。
以上对于XML来说是正确的。由于JSON主要是关于序列化,因此您可以选择最容易使用的。您将处理数据,并且您最了解深层嵌套结构是否存在问题。
答案 2 :(得分:1)
从我的角度来看,你面临着类似的困境,所有开发人员都试图设计类设计/ XML设计/ SQL模式设计:)
根据我的经验,你基本上应该分组:
您还应该记住的是:
我喜欢把事情结构化,这对我来说很有意义,所以我最有可能采用第一种方法。但是我的经验是,我使用的数据越多,我就越看到优化其结构的方法。所以我试着为以后的重构做好准备。 :)
答案 3 :(得分:1)
这可能看起来很奇怪,但重点是它允许你做的MongoDB:
{
"app":{
"facebook":{
"keys" : {
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
}
},
"twitter":{
"keys" : {
"apikey":"3241bly5vlv1l2hjv51",
"sharedsecret":"gxdz1n25f1m235xm1235",
}
}
}
}
}
为什么?
嗯,答案就是NoSQL数据库出现的原因:你不确定数据结构。考虑添加,例如routes
字段"facebook"
:
"facebook":{
"keys" : {
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"routes" : {
"mainroute" : "00.00.server.xx1",
"subroute" : "00.01.server.yy2",
}
},
该信息与twitter
无关,因为Twitter不支持假设的routes
功能。
如果您拥有#1中提议的集合会发生什么?
{
"app":{
"keys":{
"facebook":{
"apikey":"1412v5l1v5jv5j1h2v5",
"sharedsecret":"v5j12hv51hc4v123vmnv",
},
"twitter":{
"apikey":"3241bly5vlv1l2hjv51",
"sharedsecret":"gxdz1n25f1m235xm1235",
}
},
"routes" : {
"facebook" : {
"mainroute" : "00.00.server.xx1",
"subroute" : "00.01.server.yy2",
}
}
}
}
看起来有点多余,不是吗?