Node.js と Backbone の学習を開始しています。サーバーとクライアントの間でいくつかのコードを共有したいと思います ( [1]と[2]に関連)。さらに深く:
- モデルのデフォルト値を共有します。デフォルトはフォーム (クライアント側) に入力するために使用されますが、サーバー側では適用されます
- DRY であるために検証ルールを共有し、クライアント/サーバー検証を実行する
- インスタンス メソッドを共有する
したがって、私の考えは、factory
オブジェクトを使用して共通コード (デフォルト、検証ルール、パブリック インスタンス メソッド) をカプセル化factory
し、環境 (Node.js または AMD モジュール) に基づいてオブジェクトを適応させることです。
このコードはクイック&ダーティであり、機能しない可能性があります。これは良いアプローチですか、それとも単に時間の無駄ですか?
(function (factory) {
if (typeof exports === 'object') { // Node.js
var config = require('../config/config.json'),
Sequelize = require('sequelize'),
_ = require('underscore');
var User = {
receiveSms: {
type: Sequelize.BOOLEAN, allowNull: false
},
receiveNewsletter: {
type: Sequelize.BOOLEAN, allowNull: false
}
};
// Add defaultValue for each returned by
_.each(factory.defaults, function (value, key) {
if(_.has(User, key)) {
User[key].defaultValue = value;
}
});
module.exports = function () {
(new Sequelize(config.database, config.username, config.password))
.define('User', User);
};
} else if (typeof define === 'function' && define.amd) { // AMD
define(['backbone', 'uderscore'], function (Backbone, _) {
return Backbone.Model.extend(factory);
});
}
}(function () {
return { // To be adapted
defaults: {
receiveSms: false,
receiveNewsletter: true
}
}
}));