我们正在使用 Backbone 创建可重用的组件。我们创建控制器是为了设置模型和视图之间的绑定。我们希望为人们提供用他们自己的实现替换模型和视图的能力。
由于大多数人将使用我们提供的组件,我不想强迫开发人员配置或创建任何与默认设置没有区别的东西。
这意味着某人应该能够将他们想要用作模型或视图的对象的实例传递给控制器,所有配置和设置并准备就绪,或者他们可以将一些配置传递给控制器将使用的内容默认。
我不确定最好的方法是什么。
// Idea #1
var controller = new Controller({
dependencyA: {
conf: { // config for depedencyA }
},
dependencyB: {
conf: { // config for dependencyB }
class: custom.implement.Class
}
});
在这种方法中,用户无法控制如何实例化对象。这样做的坏处是,例如,Backbone 模型在构造函数中采用两个参数,而视图只采用一个。
// 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')
});
在这种方法中,用户被迫实例化开箱即用的模型。如果模型的默认设置都是合适的,那么用户正在做不必要的工作。他们唯一要做的就是创建一个他们自己的自定义实现的实例。
我不确定这里最好的方法是什么?