Skip to content

Commit

Permalink
增加文档
Browse files Browse the repository at this point in the history
  • Loading branch information
entropy-cloud committed Dec 3, 2023
1 parent 1580ff9 commit 933065b
Showing 1 changed file with 50 additions and 30 deletions.
80 changes: 50 additions & 30 deletions docs/dev-guide/delta/vfs.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,58 @@

# DSL模型文件加载

[B站讲解视频](https://www.bilibili.com/video/BV1rH4y117hd/)

Nop平台中统一使用ResourceComponentManager来加载DSL模型。

```javascript
model = ResourceComponentManager.instance().loadComponentModel(path);
```


## 加载时支持两种路径格式:

1. 普通的虚拟路径,例如`/nop/rule/test/myRule/v1.rule.xml`,直接指定具体对应的资源文件,由VirtualFileSystem来处理Delta路径解析
2. 使用resolve机制动态确定资源文件,例如`resolve-rule:test/myRule`,底层可以是虚拟文件系统管理的资源文件,也可以是存储在数据库中的数据记录。

## 注册加载器
在平台初始化的过程中,会自动搜集所有/nop/core/registry/xxx.register-model.xml模型注册文件中所定义的注册信息,
建立文件类型(fileType)与加载器(ResourceObjectLoader)之间的映射关系。

> fileType与fileExt的区别在于,它在fileName中查找最后两个dot, 而不是最后一个dot。 例如 a.orm.xml对应fileType=orm.xml, 而fileExt=xml。
## Nop平台中统一使用ResourceComponentManager来加载DSL模型。

```javascript
model = ResourceComponentManager.instance().loadComponentModel(path);
### RuleModel加载器的注册配置

```xml
<model x:schema="/nop/schema/register-model.xdef" xmlns:x="/nop/schema/xdsl.xdef"
name="rule">

<!--
resolve-rule:在/nop/rule目录下查找不同后缀名的模型文件,如果不存在,就使用nopDaoRuleModelLoader在数据库中查找。
-->
<resolve-handler resolveInDir="/nop/rule" defaultLoaderBean="nopDaoRuleModelLoader" />

<loaders>

<loader fileType="rule.xlsx"
class="io.nop.rule.core.model.compile.RuleExcelModelLoader"/>

<loader fileType="rule.xml"
class="io.nop.rule.core.model.compile.RuleDslModelLoader"/>

</loaders>

</model>
```

## 加载时支持两种路径格式:
resolve-rule:test/myRule/v1 会查找

1. /nop/rule/test/myRule/v1.rule.xlsx
2. /nop/rule/test/myRule/v1.rule.xml
3. 查找NopRuleDefinition表中定义的规则模型, ruleName=test/myRule


1. 普通的虚拟路径,直接指定具体对应的资源文件,由VirtualFileSystem来处理Delta路径解析
2. 使用resolve机制动态确定资源文件,底层可以是虚拟文件系统管理的资源文件,也可以是存储在数据库中的数据记录。

## loadComponentModel实现

Expand All @@ -41,36 +78,19 @@ ComponentModelConfig --> ResourceObjectLoader
4. ResourceLoadingCache判断depends集合中的依赖文件是否发生变化,如果没有变化,则返回缓存的解析结果
5. 在ResourceLoadingCache的Loader中再根据fileType获取到具体对用的Loader。

目前系统中内置的Loader配置有两种:
目前系统中内置了两种特殊的loader,可以直接使用元模型定义,无需编写特殊的Loader类

1. xslx-loader: 解析Excel模型文件
2. xdsl-loader: 解析xdef模型定义的XML文件

例如ORM模型的注册配置为

## RuleModel的配置示例

```xml
````xml
<model x:schema="/nop/schema/register-model.xdef" xmlns:x="/nop/schema/xdsl.xdef"
name="rule">

<resolve-handler resolveInDir="/nop/rule" defaultLoaderBean="nopDaoRuleModelLoader" />

name="orm">
<loaders>

<loader fileType="rule.xlsx"
class="io.nop.rule.core.model.compile.RuleExcelModelLoader"/>

<loader fileType="rule.xml"
class="io.nop.rule.core.model.compile.RuleDslModelLoader"/>

<xlsx-loader fileType="orm.xlsx" impPath="/nop/orm/imp/orm.imp.xml"/>
<xdsl-loader fileType="orm.xml" schemaPath="/nop/schema/orm/orm.xdef"/>
</loaders>

</model>
```

resolve-rule:test/myRule/v1 会查找

1. /nop/rule/test/myRule/v1.rule.xlsx
2. /nop/rule/test/myRule/v1.rule.xml
3. 查找NopRuleDefinition表中定义的规则模型, ruleName=test/myRule

````

0 comments on commit 933065b

Please sign in to comment.