3

私はJSONに夢中になっていて、夢中になっています。私はnode.jsとmongodbを使用していますが、2つの異なる哲学の間で引き裂かれています。

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",
                },
            },
        }
    }
}

どれくらい深く行けばいいですか?遠すぎたり遠すぎたりすることはありますか?

4

4 に答える 4

3

私は次のことを行いますが、実際には次のようなものを使用しました。

{
    "app":{
        "production":{
            "facebook":{
                "apikey":"1412v5l1v5jv5j1h2v5",
                "sharedsecret":"v5j12hv51hc4v123vmnv",
            },
            "twitter":{
                "apikey":"1412v5l1v5jv5j1h2v5",
                "sharedsecret":"v5j12hv51hc4v123vmnv",
            },
        },
        "development":{
            "facebook":{
                "apikey":"1412v5l1v5jv5j1h2v5",
                "sharedsecret":"v5j12hv51hc4v123vmnv",
            },
            "twitter":{
                "apikey":"1412v5l1v5jv5j1h2v5",
                "sharedsecret":"v5j12hv51hc4v123vmnv",
            },
        }
    }
}

システムを設計するとき、私は複数の異なる状況を処理する共通のコードを作成することを探しています。これは通常、設計に一貫性を持たせることを意味します。

上記では、「アプリ」を見つけるルーチンを作成してから、「本番」または「開発」のいずれかの運用環境を選択できます。次に、それを別の関数に渡して、「facebook」、「twitter」、または「foursquare」などの新しいサービスのいずれかで、気になる特定のサービスを見つけるように依頼できます。そして、単一のoAuth関数セットは、渡されたオブジェクトに関係なく承認プロセスを処理できます。これは、使用されているサービスに関係なく、常に「apikey」と「sharesecret」を要求できるためです。

MongoやJavascriptの柔軟性について言えば...私はその柔軟性が大好きです。これにより、他のツールセットではより困難な問題を効率的に解決できます。ただし、コードの効率とデバッグの容易さを実現するためには、その柔軟性を可能な限り一貫性を持って調整する必要があります。

于 2012-08-25T22:17:38.247 に答える
2

まあ、それは異なります。

それを意味的に見ると、そのリストにさらに多くのアプリが追加されることが予想される場合は、#1の方が正しいです。アプリリストが固定されている場合(つまり、常に2つある場合)、#2考慮される可能性があります。しかし、一般的には、よりクリーンなため、常に#1を使用します。

上記は、たとえばXMLに対して正しいでしょう。JSONは主にシリアル化に関するものであるため、最も使いやすいものを選択します。データを処理し、深くネストされた構造に問題があるかどうかを最もよく理解します。

于 2012-08-25T18:53:46.420 に答える
1

私の見解では、クラス設計/XML設計/SQLスキーマ設計を設計しようとするすべての開発者と同様のジレンマに直面しています:)

私の経験から、基本的にグループ化する必要があります。

  • あなたにとって意味のあること
  • 何が論理的だろう
  • 簡単に拡張および保守できます。

また、覚えておくべきことは次のとおりです。

  • データにアクセス/処理する方法と、その背後にある動作は何ですか。

私は自分にとって理にかなっている限り物事を構造化するのが好きなので、おそらく最初のアプローチを採用するでしょう。ただし、私の経験では、データを使用すればするほど、その構造を最適化する方法がわかります。だから私は後でリファクタリングできるようにそれを準備しておくようにします。:)

于 2012-08-25T18:56:50.040 に答える
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",
             }
        }
    }
}

少し冗長に見えますね。

于 2012-08-25T19:05:40.887 に答える