我爱上了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的灵活性……我喜欢这种灵活性。它使我们能够有效地解决在其他工具集中更困难的问题。但是,如果要获得代码效率和调试的方便性,则需要尽可能地以一致性来调整这种灵活性。

07-24 09:43