-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
在JAVA等语言中,有这样的方式:
public interface Actable {
void setWeapon(Weapon weapon);
Weapon getWeapon();
}
pubilc class Wizard implements Actable {
// ...实现
}
public class Amazon impolments Actable {
// ...实现
}当需要所有的Actable都有固定的Weapon对象时,可以按照接口来进行配置:
<interface type="Actable">
<property name="weapon" type="Sword" />
</interface>这样无论是创建Wizard还是创建Amazon都会有Sword对象作为其weapon属性
这个功能可以节省大量的配置,对应我们的现状,如果一个Model对象有setGlobalData就意味着其需要GlobalData的实例,但每一个都这么配置有2个问题:
- 配置太多,到处要写一样的配置
- 如果一个
Model从不依赖变成了依赖GlobalData,或者反过来,那么就要改配置
同时,在JAVA中,除了接口外,继承关系也一样会造成配置的继承
针对js,因为没有显式的接口这个概念,所以可能要分为类型的“定义”和类型的“组合”两种,其中“定义”依旧是普通的ioc配置,随后再通过一些判断来确认是否需要注入
ioc.configInterface(
'requireGlobalData',
function (instance) { return instance.setGlobalData; },
{
properties: {
globalData: { $ref: 'GlobalData' }
}
}
); 对于继承,由于js并不容易判断继承链,JAVA也并不是子类一定会有父类的注入配置,所以使用一个import或mix配置即可:
var config = {
foo: {
properties: {
x: { $ref: 'x' }
}
},
bar: {
mix: 'foo',
properties: {
y: { value: 2 }
}
}
};Metadata
Metadata
Assignees
Labels
No labels