Skip to content

依赖的继承和组合 #4

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions