MVCのフレームワークでは、コントローラはなるべく薄くしてモデル内のメソッドを追加していく傾向があります。mBaaSのJavaScript SDKを使っている場合も同様で、データストアを直接操作するよりもラッピングする方がメンテナンスしやすくなったり、共通化されたメソッドを作りやすくなります。
今回はその基本を紹介します。なお、この方法は Node.js でのみ有効です。Monacaなどではインスタンスにメソッドを追加する方法のみが利用できます。
クラスにメソッドを追加する場合
データストアのクラスは次のように生成します。
const Item = ncmb.DataStore('Item');
この Item を拡張したい場合には次のようにします。
const Query = require('ncmb/lib/query'); Query.new_method = (params) => { console.log('これは新しいメソッドです'); }
これをあらかじめ定義した上でデータストアのクラスを生成すると新しいメソッドが使えます。
const Query = require('ncmb/lib/query'); Query.prototype.new_method = (params) => { console.log(`これは新しいメソッドです。 ${params}`); }; const NCMB = require('ncmb'); const ncmb = new NCMB('YOUR_APPLICATION_KEY', 'YOUR_CLIENT_KEY'); const Item = ncmb.DataStore('Item'); Item.new_method('これは引数'); // -> これは新しいメソッドです。 これは引数
インスタンスにメソッドを追加する場合
インスタンスの場合、あまり良い方法がありません。あらかじめ作ってあるクラスに対してprototypeで拡張する形になります。ただし、これは Item を別で作った場合には有効になりませんので注意してください。
Item.prototype.new_method = (params) => { console.log(`これはインスタンスの新しいメソッドです。 ${params}`); }; const item = new Item(); item.new_method('これは引数');
このようにすることで新しいメソッドが使えるようになります。
item.new_method('これは引数'); // -> これはインスタンスの新しいメソッドです。 これは引数
最後に
このような方法を使うことでデータストアを拡張できます。よく使うメソッドはクラスの中に入れてしまえば再利用しやすくなったり、コントローラ側の処理を薄くできるでしょう。