关于Elpis全栈框架,DSL模版引擎的一些个人思考

26 阅读3分钟

关于Elpis全栈框架,DSL模版引擎的一些个人思考

现阶段,大部分前端程序员的工作内容都比较枯燥,且进行一些无意义的苦力劳动,如下:

1.工作中大部分工作是重复性的CRUD 2.项目中存在大量的屎山代码,代码维护性差 3.代码程序逻辑性差,看起来很难理解

在Elpis中,将咱们程序员现阶段存在的一些痛点,进行的了整合,利用DSL领域模型,将沉淀当下程序员80%的重复性工作,将开发的精力放在20%的可扩展性的开发工作中。

关于DSL的设计

1.在elpis项目中,DSL模版引擎的一些基础配置,配置如图:

      model: '', //模版类型,不同模版类型对应不一样的模版数据结构
      name: '',//模版名称
      desc:'',//模版描述
      icon:'',//模版图标
      menu: [
         {
          key: '', //菜单唯一标识
          name: '',//菜单名称
          menuType: '',//菜单类型,枚举值:group / module
          moduleType: '',// 枚举值:sider/iframe/custom/schema
          },...]
       }

通过图中的模版配置,完成对页面的基础配置。 2.在完成对项目的基础配置之后,需要大模块下的小模块进行更细致的配置操作: (1)当menuType为group的时候,会在当前菜单下产生子菜单,这里就需要递归去获取当前菜 单下的所有的子菜单进行展示

//当 menuType === group 时,可填
subMenu: [{
// 可递归 menuItem
          }],

(2)当moduleType为schema时,说明这部分为咱们需要沉淀的80%的功能,在elpis项目中通过利用《JSON-SCHEMA》工具完成相对应的配置:

//当 moduleType === schema 时

schemaConfig: {

api:'',//数据源API(遵循 RESTFUL 规范)

schema:{//板块数据结构

type:'object',

properties:{

key:{

...schema,//标准 scheam 配置

type:'',//字段类型

label:'',//字段中文名

//字段在 table-bar 中的配置

tableOption:{

...elTableColumnConfig,//标准 el-table-column 配置

toFixed:0,//保留几位小数

visiable:true,//默认为true(false时,表示不再表单中显示)

},//字段在 table中的相关配置

//字段在 search-bar 中的配置

searchOption:{

...elComponentConfig,//标准 el-form 配置

comType:'',//配置组件类型

default:'',//默认值
//comType === 'select'

enumList:[],

//comType === 'dynamicSelect'

api:''

}

}

}

},

tableConfig: {

headerButtons:[{

label:'',//按钮中文名

eventKey:'',//按钮事件名

eventOption:{},//按钮事件具体配置

...elButtonConfig //标准 el-button配置

},{}],//可以多个配置

rowButtons:[{

label:'',//按钮中文名

eventKey:'',//按钮事件名

eventOption:{

//当 eventKey === ‘remove’

params:{

//paramKey = 参数的键值

//rowValueKey = 参数值,格式为schema::tableKey ,到table 中找相应的字段

paramKey:rowValueKey

}

},//按钮事件具体配置

...elButtonConfig //标准 el-button配置

},{}],//可以多个配置

},//table 相关配置
searchConfig:{},//search-bar相关配置

在这里可以看到,在elpis项目中,我们并不是去对每一个页面的各种组件,例如:table,searchBar组件等在每个页面进行重复性的开发,而是将各种组件进行了一个抽象的模版定义,这样我们可以通过对DSL模版引擎的配置,就可以完成对不同菜单下一些重复性的CURD工作就行耦合和沉淀,这样也让代码的可维护性提高。

总结

在elpis项目中,通过DSL领域模型的概念,将前端程序员日常工作80%的工作进行了整合,而通过DSl将这80%的工作进行沉淀,只需要用户通过文档进行对应的配置即可展示想要的页面。在组件方面,并不是像前端程序员日常工作一样,将一些重复性的东西抽离出来变成一个组件进行调用,在elpis中我们通过DSL模版引擎,以及各类组件的解析器进行动态的渲染,而不是写死在页面上。

所以我觉得在elpis项目中DSL模版引擎的真正目的是为了培养程序员的框架思维,以及思考问题和不断学习的能力,这样才能让前端程序员在日常的工作中保持更高的竞争力。