基于elpis下 DSL有感

前言

前端程序员中大部分都是业务型开发员。看似工作忙碌,但是80%的工作的都是重复型的。每次业务过来都是将以前的代码拿过来改写来,然后完成那20%不同的业务需求。两三年后发现技术没有提升。因此迫切的希望改变工作模式,减少重复性的工作。提高工作效率,提升自己的技术储备。因此有了DSL

什么是DSL

DSL 是 Domain-Specific Language(领域特定语言)的缩写,领域特定语言指的就是专注于某个应用程序领域的计算机语言。

在我们这里指的是 针对某一种领取重复型工作,我们将重复型的工作完成沉淀,让其可以通过配置来完成。我们只需要专注于不能通过配置完成的工作。并将其完成沉淀。来扩充我们的模型。这样我们就可以通过配置来搭建我们的项目实现一种类似低代码平台的效果。

elips的DSL的运行模式

声明式编程: 对于重复型的工作通过配置的方式来完成开发。减少编码时间,提高工作效率

可继承: 通过一个模板标准。可以配置出多个不同领域的基础模版。然在不同领域的基础模版上可以派生出不同项目来扩充自己的需求。

**可扩充性:**对于模版中不支持的类型或者业务可以通过自定义组件或者页面来完成

持续性: 组件的开发可以提升DSL功能,来提高DSL的能力

**最终实现:**通过配置实现页面的效果。程序员通过对配置文件的修改来实现页面的UI,页面的交互,API的增删改查。路由的跳转。

elpis DSL的实现

在elpis中,通过对配置文件的解析来完成各种不同的布局交互功能。 DSL配置

csharp 复制代码
{
	mode: 'dashboar', // 模板类型,不同模板类型对应不一样的模版数据结构
	name: '', // 名称
	desc: '', // 描述
	icon: '', // icon
	homePage: '', // 首页(项目配置)
	// 头部菜单
	menu: [
		{
			key: '', //菜单唯一描述
			name: '', // 菜单唯一名称
			menuType: '', //枚举值 goup/module
			// 当menuType == group 时可填
			subMenu: [
				{
					// 可递归 menuItem
				},
				...
			],

			// 当menuType == module 时,可填
			moduleType: '', // 枚举值  sider/iframe/custom/schema

			// 当mouduleType === sider 时
			siderConfig: {
				menu:[
					{
						// 可递归 menuItem(除 moduleType === sider)
					}
				]
			},

			// 当mouduleType === iframe时
			iframeConfig: {
				path: '', //iframe 路径
			},

			// 当mouduleType === custom时
			customConfig: {
				path: '', // 自定义路由路劲 
			},
			
			// 当mouduleType === schema时
			schemaConfig: {

			}
		},
		...
	],

}

页面UI的解析

通过模版中不同的moduleType 来实现页面样式的展示

css 复制代码
sider  侧边栏布局
iframe 嵌套iframe页面
custom 自定义路由
schema  通过schema解析页面

功能交互的解析

schema配置

go 复制代码
schemaConfig: {
				api: '/api/user', //数据源API(遵循RESTFUL 规范)
				schema: { // 板块数据结构
					type: 'object',
					properties: {
						key: {
							...schema,// 标准 schema 配置
							type: '',// 字段类型
							label: ''// 字段的中文名
							// 字段在table中的相关配置
							tableOption: {
								...elTableColumnConfig, // 标准el-table-column配置
								toFixed: 0, //保留小数点后几位
								visiable: true, // 默认为true(false 表示 不在表单中显示)
							},
							// 字段在seachbar中的相关配置
							searchOption: {
								...elTableColumnConfig, // 标准el-table-column配置
								comType: '',// 配置组件类型 input/select/...
								default: '',// 默认值

								// 当comType = select
								enumList:[],

								// 当comType = dynamic-select
								api: ''

							}
						},
						...
					}
				},
				//table 相关配置
				tableConfig: {
					haderButtons:[{
						label: '', // 按钮中文名
						eventKey: '', // 按钮事件名
						eventOption: {},// 按钮具体配置
						...elButtonConfig, // 标准的el-button 配置
					},...],
					rowButtons: [{
						label: '',// 按钮中文名
						eventKey: '', // 按钮事件名
						eventOption: {
							//当eventKey === 'remove'
							params:{
								// paramKey = 参数键值
								// rowValueKey = 参数值(格式为 schema:xx 的时候,到table中找相应的字段)
								paramKey: 'rowValueKey'
							}
						}, //按钮事件具体配置
						...elButtonConfig, // 标准的el-button 配置
					},...]
				}, 
				searchConfig: {}, // search-bar相关配置
				components: {} // 模块组件
			}

通过对schemaConfig 的解析来实现页面不同的功能

api:在Resuful规范下,增删改查都可以通过这个 配置生成

schema 字段是这个配置的核心,用于页面显示的数据和各种功能的配置和实现。

  • tableOption 用于现实页面表结构的数据,

  • tableConfig 用于表中不同行的配置和交互设置

  • searchOption 用于设置 搜索栏设置是否显示

  • searchConfig 用于搜索设置中的不同交互

至此,我们主要工作从业务代码的增删改查,变成了DSL架构和解析器的开发。让我们从业务型程序员转换成了架构师的工作。

备注引用: 抖音"哲玄前端"《大前端全栈实践》

相关推荐
不一样的少年_4 小时前
【前端效率工具】再也不用 APIfox 联调!零侵入 Mock,全程不改代码、不开代理
前端·javascript·浏览器
IT_陈寒4 小时前
JavaScript 性能优化实战:我通过这7个技巧将页面加载速度提升了65%
前端·人工智能·后端
JIngJaneIL4 小时前
数码商城系统|电子|基于SprinBoot+vue的商城推荐系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·数码商城系统
GISer_Jing4 小时前
Flutter架构解析:从引擎层到应用层
前端·flutter·架构
GISer_Jing5 小时前
Flutter开发全攻略:从入门到精通
android·前端·flutter
艾小码5 小时前
Vue组件通信不再难!这8种方式让你彻底搞懂父子兄弟传值
前端·javascript·vue.js
lcc1875 小时前
Vue 数据代理
前端·javascript·vue.js
Moment5 小时前
为什么我们从 Python 迁移到 Node.js
前端·后端·node.js
excel5 小时前
📘 全面解析:JavaScript 时间格式化 API 实战指南
前端
咖啡の猫6 小时前
Vue基本路由
前端·vue.js·状态模式