1

node.js アプリケーションを開発しています。データモデルを作成する方法を探しています。

クライアントとの間で送受信されるデータは JSON です。データベースは MongoDb であるため、データベースとの間のデータは JSON です。

私は JS を初めて使用します。カプセル化されたオブジェクトの作成専用の js ライブラリがたくさんあります。それはまだ必要ですか?

モデルを単純なjsオブジェクトとして定義し、必要に応じてプロトタイプベースの継承を使用すると、どのような結果が生じる可能性がありますか?

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

私が見ているように、この質問にアプローチするには2つの方法があります。

あなたのデータは JSON stringとして転送されていると思います。応答に表示され、実行可能な配列とオブジェクトに変換するために
"[{\"key\":\"val\"}]"それらを通過させます。JSON.parse

したがって、最初の方法は「クラスインスタンス」を作成することです(new継承は必要ありません。データ型に基づいて、データをカプセル化し、インターフェースを公開するコンストラクター関数のみです)。

function makeTweet (data) {
    var tweet = {
            from_user : data.from_user || "anonymous",
            /* ... */
        },

        toString = function () {},

        public_interface : {
            toString : toString,
            /* getters, etc */
        };
    return public_interface;
}

あなたはすでにこのことを知っていると思いますが、同じプロセス内に 2 つまたは 3 つの異なるデータ型がある状況を考えてみてください (クライアントに印刷する準備ができたときの行末など)。そして、すべてのオブジェクトのパブリック フィールドを読み書きするプロセスがあります。異なるオブジェクトが異なるプロパティを持っている場合、物事は不十分に終わるか、不安定ifなステートメントの海で終わります。

それを見る他の方法は、エンティティ/サービスシステムかもしれません

function handleTweets (tweetArr) {
    var templateFormat = system.output_format,
        string = "";

    if (templateFormat === "HTML") {
        string = HTMLtemplateTweets(tweetArr);
    } else { /* ... */ }
}

function HTMLtemplateTweets (tweetArr) {}
function JSONtemplateTweets (tweetArr) {}
function XMLtemplateTweets  (tweetArr) {}
...

要点は、JSON 文字列をデータのみのオブジェクトの配列に変換し、それらをタイプ固有のライブラリ/システム関数の行にフィードすることです。

これは、OO (古典的に受け入れられている) アプローチではなく、非常に単純化されたエンティティ/システム アプローチに似ています。

ここで、データの安全性は、オブジェクトが意図した 1 つのパスのみを通過することを確認することから得られます。したがって、変換はそのタイプのすべてのオブジェクトに対して予測可能になります。

JSでパフォーマンス/メモリの目的で「継承」が必要な場合は、これも検討すべき方向かもしれません。

于 2012-12-25T18:32:22.410 に答える
0

モデルを単純なjsオブジェクトとして定義し、必要に応じてプロトタイプベースの継承を使用すると、どのような結果が生じる可能性がありますか?

IMO、多くの開発者が同じコードで作業を開始するにつれて、アプリケーションのサイズが大きくなったり、チームのサイズが大きくなったりすると、時間の経過とともに保守性が失われます。

言い換えれば、適切なカプセル化がなければ、所有していないオブジェクトを簡単に変更できます。触れたくない部分を簡単にいじることができます。

API だけがユーザーに公開され、適切なカプセル化がない何らかのライブラリ/フレームワークを作成している場合、おそらく 1 回の変更ですべてがダウンする可能性があります。

例えば:

var myObj = {
    mySecretPrivateCrucialFunction: function () {
        // all the awesome crucial logic
    },
    //This is what you want other parts of the code ...
    // ... to be interacting with in this object
    myPublicMethod: function () { 
            // some logic
        mySecretPrivateCrucialFunction(); 
            // some thing else
    }
}

私がすることができます。

myObj.mySecretPrivateCrucialFunction = function () {
    alert('yay..i got you..');
};

しかし、このようにすると、そのチャンスを与えられません。

var myObj = (function () {
        var mySecretPrivateCrucialFunction = function () {
                // all the awesome crucial logic
            }
        //This is what you want other parts of the code ...
        // ... to be interacting with in this object
        return {
            myPublicMethod: function () {} /*some logic */
            mySecretPrivateCrucialFunction(); /*some thing else */
        }
    })();

すべてのプロパティを非表示/非公開にしたい場合でも、オブジェクトの JSON 表現を取得したい場合-次のようなことができます-

var myObj = (function () {
    // your private properties
    var prop1 = 1;
    var prop2 = 2;
    // your getters
    var getProp1 = function () {
            return prop1;
        };
    var getProp2 = function () {
            return Prop2;
        };
    // your setters
    var setProp1 = function (newValue) {
            prop1 = newValue;
        };
    var setProp2 = function (newValue) {
            prop2 = newValue;
        };
    // your JSON representation of the object
    var toString = function () {
            return JSON.stringify({
                prop1: prop1,
                prop2: prop2
            });
        };
    // Object that gets exposed -
    return {
        "getProp1": getProp1,
        "getProp2": getProp2,
        "setProp1": setProp1,
        "setProp2": setProp2,
        "toString": toString
    }
})();
于 2012-12-25T17:05:13.600 に答える