yang中的面向对象特性

yang模型中的封装、继承和多态。

封装:解决可维护性。对应原则,单一职责,开闭原则

继承:解决可重用性。对应原则,liscov替换,

多态:解决可扩展性。对应原则,接口隔离。

 

一、设计时

封装性:

1、list,container,容器类,grouping,input,output,封装数据内容。

数据内容包括leaf,leaf-list,choice/case,

数据行为的约束:

值关联约束包括:leafref,identityref,

条件约束:when,must,mandatary。

操作约束:config false/true。

值约束:unique,key,default。

继承性:

1、grouping:定义了一个数据类。

list,container,容器类及choice,uses grouping就是继承了数据类中的成员,且成员是public的。

grouping是父类,uses grouping的是子类。

2、identity定义了一种特殊的类型。

base identity就是定义了一种类型的继承关系。

3、augment

老的容器节点是老的数据类,augment到这个老的容器节点后,继承老类生成了一个新类。

被augment的节点是父类,augment后形成新类。

 

二、编译时

多态性:

1、refine。

在uses grouping时,通过refine 重新定义grouping的数据约束行为。

2、if-feaure。

用于特性级的裁剪,基于某个基类/基础package编译生成可裁剪

3、deviate。

编译可裁剪,基于任意节点可裁剪。

类似于删除类中的成员变量或方法,但是不是直接在原始类中删除,而是通过裁剪文件在编译时合并删除。类似于影子文件。

 

三、运行时

多态性:

1、mountpoint。

schema实例之间隔离,schema之间可以基于相同的实例的基础上,基于各自的实例继续扩展或裁剪。

基于module粒度的安装,随配置触发,比如新建一个虚拟交换设备,该动作会触发在物理设备上的虚拟设备列表中新增一个设备,该设备对应的schema是该操作完成后,才被mount到内存中。如果删除该设备,则设备对应的schema和基于schema产生的数据则随之删除。

设计时在被mount的模块中定义好mount点(该mount点,在运行时就不可修改了,实际上笔者认为可以做到运行时新增mount点,或者在要mount到mountpoint的模块中再定义mount点,mount点迭代)

实现时包含了mountpoint的模块被作为yang library中的元数据,在服务端存储并实现。

运行时,可能有多个实例mount到同一个mount点,它们之间彼此隔离。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值