Skip to content

依赖的继承和组合 #4

@otakustay

Description

@otakustay

在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个问题:

  1. 配置太多,到处要写一样的配置
  2. 如果一个Model从不依赖变成了依赖GlobalData,或者反过来,那么就要改配置

同时,在JAVA中,除了接口外,继承关系也一样会造成配置的继承


针对js,因为没有显式的接口这个概念,所以可能要分为类型的“定义”和类型的“组合”两种,其中“定义”依旧是普通的ioc配置,随后再通过一些判断来确认是否需要注入

ioc.configInterface(
    'requireGlobalData',
    function (instance) {  return instance.setGlobalData; },
    {
        properties: {
            globalData: { $ref: 'GlobalData' }
        }
    }
); 

对于继承,由于js并不容易判断继承链,JAVA也并不是子类一定会有父类的注入配置,所以使用一个importmix配置即可:

var config = {
    foo: {
        properties: {
            x: { $ref: 'x' }
        }
    },
    bar: {
        mix: 'foo',
        properties: {
            y: { value: 2 }
        }
    }
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions