领域模型架构建设
1.领域模型是什么?
领域模型的核心特质是数据驱动,其核心逻辑是通过一份预定义的标准化配置文件,经各类自定义解析器(Parser)处理后,动态生成对应功能组件或业务内容。例如,通过SearchBar解析器可生成搜索栏组件,通过Table解析器可生成表格组件,实现“配置决定输出”的核心目标。
1.1 为什么需要领域模型
在传统开发模式中,我们常对基础组件进行二次封装,但这类封装多局限于单一项目的特定需求,耦合了项目专属的业务逻辑与样式,导致组件复用性差,跨项目迁移时往往无法直接适配。而领域模型实现了真正意义上的“定制化封装”——其核心依赖仅为标准化数据,彻底剥离了与具体项目的强耦合。
传统组件通常通过Props参数控制逻辑与样式,随着项目迭代,Props数量会持续膨胀,组件内部判断逻辑愈发复杂,最终导致组件冗余、维护成本激增。而数据驱动的领域模型可有效解决这一问题:通过对不同功能组件(如普通输入框、动态输入框、联动选择框等)进行抽象归类,基于配置数据动态匹配解析规则,实现组件功能的无限扩展与灵活复用,同时保持组件本身的轻量化。
此外,在多产品、多UI版本的开发场景中,传统模式下不同UI设计需对应开发不同组件,若存在多个表单页面,需逐一修改样式与结构,重复性工作占比极高。领域模型的核心价值之一,便是沉淀80%的重复性开发工作:通过统一模板页承载基础逻辑与布局,无论UI版本如何迭代,仅需修改模板文件或配置数据,即可快速生成符合需求的表单及各类组件,大幅提升开发效率与迭代速度,同时保证多项目、多版本的UI一致性与可维护性。
2.用配置描述站点,用引擎解析配置
领域模型的整体流转遵循 模板→模型→项目→内容→应用 的核心链路,各层级依托DSL(模板配置)、模板页与解析器形成强关联且低耦合的架构体系,具体逻辑如下:
DSL作为模板配置,其核心作用是描述整个项目或站点的整体规则,而非单一页面的具体形态。体系中遵循“一份DSL对应一个模板页、一个模板解析器”的一对一匹配规则,模板与模板解析器强绑定,由解析器基于模板页将DSL配置转化为各类站点系统。以Dashboard模板为例,每个该类型模板均配套专属DSL描述、模板页及解析器,基于此模板可搭建多领域、多业务维度的不同模型。
模板是基础载体,基于同一模板可衍生多个独立模型,每个模型又能进一步派生出不同项目。最终,项目结合解析引擎处理生成具体内容,这些内容落地为可直接使用的应用,实现从抽象配置到具象应用的全链路闭环,支撑多领域、多项目的高效复用与灵活扩展。
领域模型的整体流转遵循 模板→模型→项目→内容→应用 的核心链路,各层级依托DSL(模板配置)、模板页与解析器形成强关联且低耦合的架构体系。以下结合Dashboard类型模板的DSL配置示例,按功能分类解读核心字段用途,明确各配置与流转链路的对应关系:
1.2.1 基础通用字段(模板/模型/项目共用核心配置)
- mode:模板类型标识,用于区分不同模板类型,不同类型对应差异化的模板数据结构,是解析器识别模板类型的核心依据。
- name:名称字段,根据使用场景适配为「模型名称」或「项目名称」,用于标识当前模型/项目的身份,便于管理与展示。
- desc:描述字段,补充说明模型/项目的用途、业务场景等信息,提升配置的可读性。
- icon:图标配置,用于在应用界面(如菜单、首页)展示模型/项目的可视化图标,优化UI呈现。
- homePage:首页配置(专属项目层级),指定项目的默认首页路径,实现项目启动后直接跳转至目标页面。
1.2.2 头部菜单配置
menu数组用于定义应用顶部菜单集合,每个菜单项支持两种类型(group/module),实现菜单的层级嵌套与功能划分:
- key:菜单唯一标识,确保每个菜单项不重复,用于菜单的选中、跳转等逻辑关联。
- name:菜单显示名称,展示在顶部导航栏的可视化文本。
- menuType:菜单类型枚举(group/module),决定菜单的功能形态: group类型:菜单组,用于收纳子菜单,通过subMenu字段实现层级嵌套(subMenu结构与menu一致,支持递归),适合复杂导航的分类管理。
- module类型:功能模块菜单,点击后加载对应功能模块,通过moduleType字段指定模块加载方式,支持4种枚举值(sider/iframe/custom/schema)。
1.2.3 模块类型配置(module菜单的差异化加载逻辑)
-
sider类型(侧边栏模块):通过siderConfig配置侧边栏菜单,内部menu数组可递归定义侧边栏菜单项(禁止嵌套sider类型),实现顶部菜单与侧边栏的联动布局。
-
iframe类型(嵌入模块):通过iframeConfig的path字段指定外部页面URL,实现将第三方页面嵌入当前应用,无需重构即可复用外部功能。
-
custom类型(自定义路由模块):通过customConfig的path字段指定自定义路由路径,加载应用内部的自定义页面组件,适配个性化业务页面需求。
-
schema类型(数据驱动模块):核心业务模块,基于schemaConfig配置动态生成表格、搜索栏等组件,是领域模型数据驱动的核心体现,具体配置如下: api:数据源API地址,遵循RESTful规范,用于获取模块所需的业务数据,支撑组件动态渲染。
schema:板块数据结构定义,遵从JSON-SCHEMA,通过type和properties描述字段集合,每个字段包含多场景配置: 基础配置(type/label):指定字段类型(如字符串、数字)和中文名称,作为组件渲染的基础依据。
tableOption:表格展示配置,继承el-table-column标准配置,补充toFixed(小数保留位数)、visiable(是否显示)等表格专属属性,控制字段在表格中的展示与交互。
searchOption:搜索栏配置,继承el-component标准配置,通过comType指定组件类型(输入框、下拉框等),支持默认值、下拉选项枚举,以及动态下拉框的API联动,控制字段在搜索栏的展示与交互逻辑。
tableConfig:表格操作配置,通过headerButtons(表头按钮)和rowButtons(行内按钮)定义表格的操作按钮,指定按钮名称、事件标识及参数配置,实现表格的新增、删除、编辑等交互功能。
searchConfig:搜索栏整体配置,补充搜索栏布局、提交方式等全局属性。
components:模块自定义组件配置,用于引入非标准组件,适配特殊业务场景的UI与逻辑需求。
上述配置覆盖了Dashboard模板从基础信息到核心业务组件的全维度定义,解析器可依据这些字段,将DSL配置转化为具备完整导航、数据展示、交互功能的Dashboard应用,完美契合“模板→模型→项目→应用”的流转链路,实现通过配置快速生成个性化业务系统。
DSL作为模板配置,其核心作用是描述整个项目或站点的整体规则,而非单一页面的具体形态。体系中遵循“一份DSL对应一个模板页、一个模板解析器”的一对一匹配规则,模板与模板解析器强绑定,由解析器基于模板页将DSL配置转化为各类站点系统。以Dashboard模板为例,每个该类型模板均配套专属DSL描述、模板页及解析器,基于此模板可搭建多领域、多业务维度的不同模型。
模板是基础载体,基于同一模板可衍生多个独立模型,每个模型又能进一步派生出不同项目。最终,项目结合解析引擎处理生成具体内容,这些内容落地为可直接使用的应用,实现从抽象配置到具象应用的全链路闭环,支撑多领域、多项目的高效复用与灵活扩展。
3.总结
里程碑三并非局限于某个具体功能点的实现,而是一套贯穿开发全流程的设计理念,这也是整个课程想要传递的核心价值。沉淀80%的CRUED工作,并提供20%的灵活定制化。其核心逻辑围绕“一份标准化数据驱动全链路渲染。