Backbone を使用して、再利用可能なコンポーネントを作成しています。モデルとビューの間のバインディングをセットアップするためにコントローラーを作成します。モデルとビューを独自の実装に置き換える機能を人々に提供したいと考えています。
大部分の人は私たちが提供するコンポーネントを使用するので、開発者にデフォルトと変わらないものを構成または作成するよう強制したくありません。
これは、誰かがモデルまたはビューとして使用したいオブジェクトのインスタンスをコントローラーに渡すことができる必要があることを意味し、すべてが構成され、セットアップされ、準備ができています。または、コントローラーが使用するものに構成を渡すことができます。デフォルト。
最善のアプローチが何であるかはわかりません。
// Idea #1
var controller = new Controller({
dependencyA: {
conf: { // config for depedencyA }
},
dependencyB: {
conf: { // config for dependencyB }
class: custom.implement.Class
}
});
このアプローチでは、ユーザーはオブジェクトをインスタンス化する方法を制御できません。これの悪い点は、たとえば、バックボーン モデルはコンストラクターで 2 つの引数を取るのに対し、ビューは 1 つしかとらないことです。
// Idea #2
var controller = new Controller({
dependencyA: {
args: ['arg1',{
opt1: 'opt-value',
}]
},
dependencyB: {
args: ['a','b','c']
class: custom.implement.Class
}
});
Args は、コンストラクターに渡される引数になります。これは、コントローラーが args 配列を使用してコンストラクターを呼び出すことを意味します。これは、デフォルトの依存関係のカスタム構成を渡す場合にのみ、本当にメリットがあります。独自の実装を渡したい場合は、もっと面倒です。
// Idea #3
var controller = new Controller({
dependencyA: new outOfBoxModel({ // configuration }),
dependencyB: new custom.imeplement.Class('a','b','c')
});
このアプローチでは、ユーザーはすぐに使えるモデルをインスタンス化する必要があります。ただし、モデルのデフォルト設定がすべて適切である場合、ユーザーは不要な作業を行っています。彼らがしなければならないことは、独自のカスタム実装のインスタンスを作成することだけです。
ここで最善のアプローチが何であるかわかりませんか?