Context.Dependency
// @namespace Context.Dependency
import { Context } from 'rcfm'
const Dependency = Context.Dependency
Custom Types
@typedef {Object} DependencyInstance
@description - 依赖关系管理器实例
@typedef {Object} DependencyProvider
@description - 被依赖者
@prop {string} id - 唯一标识
@prop {string} prop - 属性名称
@typedef {Object} DependencyRelier
@description - 依赖者
@prop {string} id - 唯一标识
@prop {string} prop - 属性名称
@typedef {Object} DependencyAssociation
@description - 依赖关系
@prop {DependencyProvider} provider
@prop {DependencyRelier} relier
Exception Types
@type {ExceptionInstance}
@description - 不合规实例
@prop {string} type = "DEPENDENCY_INVALID_INSTANCE"
@prop {string} [name = type]
@prop {Object} [data = {}]
@prop {string} [message]
@type {ExceptionInstance}
@description - 循环依赖
@prop {string} type = "DEPENDENCY_CIRCLE_REFERENCE"
@prop {string} [name = type]
@prop {Object} [data = {}]
@prop {string} [message]
Class Methods
.create()
创建一个依赖关系管理器实例。
// Dependency.create()
// @returns {DependencyInstance}
// @example
const dependency = Dependency.create()
.isDependency()
判断入参是否是一个依赖关系管理器实例。
// Dependency.isDependency(arg)
// @param {*} arg - 任意参数
// @returns {boolean} - 当入参是 DependencyInstance 时返回 true,否则返回 false
// @examples
Dependency.isDependency(Dependency.create()) // true
Dependency.isDependency({}) // false
.isntDependency()
判断入参是否不是一个依赖关系管理器实例。
// Dependency.isntDependency(arg)
// @param {*} arg - 任意参数
// @returns {boolean} - 当入参是 DependencyInstance 时返回 false,否则返回 true
// @examples
Dependency.isntDependency(Dependency.create()) // false
Dependency.isntDependency({}) // true
.mustbeDependency()
当入参不是一个依赖关系管理器实例时抛出异常。
// Dependency.mustbeDependency(arg, message)
// @param {*} arg - 任意参数
// @param {string} [message] - 自定义异常对象消息
// @returns {undefined}
// @examples
Dependency.mustbeDependency(Dependency.create())
Dependency.mustbeDependency({}) // Throws a DEPENDENCY_INVALID_INSTANCE exception.
Instance Methods
#add()
添加一组或多组依赖关系。如会导致循环依赖则抛出 DEPENDENCY_CIRCLE_REFERENCE
异常。
// dependency#add(associations, options)
// @param {DependencyAssociation | DependencyAssociation[]}
// @param {Object} [options]
// @prop {string} [options.group] - 依赖者分组
// 用于按不同目的划分依赖者,可在删除时进行过滤以删除该分组下的依赖关系。
// @returns {undefined}
// @example - 添加一组依赖关系
dependency.add({
provider: {id: '1', prop: 'age'},
relier: {id: '2', prop: 'age'}
})
// @example - 添加多组依赖关系
dependency.add([{
provider: {id: '1', prop: 'age'},
relier: {id: '3', prop: 'age'}
}, {
provider: {id: '1', prop: 'age'},
relier: {id: '4', prop: 'age'}
}])
// @example - 产生循环依赖,因为前例中已添加过相反的依赖关系
dependency.add({
provider: {id: '2', prop: 'age'},
relier: {id: '1', prop: 'age'}
}) // DEPENDENCY_CIRCLE_REFERENCE exception
// @example - 按依赖者分组添加依赖关系
dependency.add([{
provider: {id: '1', prop: 'age'},
relier: {id: '3', prop: 'age'}
}, {
provider: {id: '1', prop: 'age'},
relier: {id: '4', prop: 'age'}
}], { group: 'myRelierGroup' })
#delete()
移除已添加的依赖关系。
// dependency#delete(target, options)
// @param {DependencyProvider | DependencyRelier} target - 如不指定 prop,则删除含有目标的所有依赖关系。
// @param {Object} [options = {}]
// @prop {string} [options.only] - 当被设定为 "relier" 则只删除目标是依赖者的依赖关系
// @prop {string} [options.group] - 只当 only 被设定为 "relier" 时有效。
// 当 group 设定时,只删除目标是依赖者且在分组下的依赖关系,否则删除所有目标是依赖者的依赖关系。
// @returns {undefined}
// @example - 删除指定目标 age 属性的所有依赖关系
dependency.delete({id: '2', prop: 'age'})
// @example - 删除指定目标的所有依赖关系
dependency.delete({id: '2'})
// @example - 删除所有指定目标是依赖者且含有 age 属性的依赖关系
dependency.delete({id: '2', prop: 'age'}, {only: 'relier'})
// @example - 删除所有指定目标是依赖者的依赖关系
dependency.delete({id: '2'}, {only: 'relier'})
// @example - 删除所有指定目标是依赖者且在 "myRelierGroup" 分组下的依赖关系
dependency.delete({id: '2'}, {only: 'relier', group: 'myRelierGroup'})
#reliers()
查询一个被依赖者或多个被依赖者的依赖者数组,查询结果按照依赖深度由浅到深、由少到多排序。
// dependency#reliers(provider, options)
// @param {DependencyProvider | DependencyProvider[]}
// @param {Object} [options = {}]
// @prop {boolean} [options.reload = false] - 当设定为 true,会清空之前的查询结果缓存,重新查询后再次写入缓存。
// @prop {boolean} [options.deep = true] - 当设定为 true,只返回直接依赖者数组。
// @prop {boolean} [options.self = true] - 当设定为 true,返回数组中不包括 id 与 provider 相同的依赖者。
// @prop {group} [options.group] - 当设定时,只返回分组下的依赖者。
// @returns {null | DependencyRelier[]}
// @example - 添加依赖关系
const dependency = Dependency.create()
dependency.add([{
provider: {id: '2', prop: 'age'},
relier: {id: '3', prop: 'age'}
}, {
provider: {id: '1', prop: 'age'},
relier: {id: '2', prop: 'age'}
}, {
provider: {id: '1', prop: 'age'},
relier: {id: '3', prop: 'age'}
}])
dependency.add({
provider: {id: '3', prop: 'gender'},
relier: {id: '1', prop: 'gender'}
})
dependency.add({
provider: {id: '1', prop: 'gender'},
relier: {id: '1', prop: 'age'}
})
dependency.add({
provider: {id: '3', prop: 'hobbit'},
relier: {id: '4', prop: 'hobbit'}
})
// @example Returns ->
// [
// {id:"1", prop:"gender"},
// {id:"4", prop:"hobbit"},
// {id:"1", prop:"age"},
// {id:"2", prop:"age"},
// {id:"3", prop:"age"}
// ]
dependency.reliers({id: '3'})
// @example Returns ->
// [
// {id:"1", prop:"gender"},
// {id:"1", prop:"age"},
// {id:"2", prop:"age"},
// {id:"3", prop:"age"}
// ]
dependency.reliers({id: '3', prop: 'gender'})