DSL 初步的设计和探索 (2)

为什么我们会想到要用 DSL 呢,最早是在制作很多产品的控台的时候,一个产品需要一个给商户使用的控台,一个给内部人员使用的控台。

然后带来以下的问题:

  1. 相似的页面的重复制作,虽然用了 MVC,但是不同项目的定制依然存在,一个新项目的流程时间还是长,对于一些查询条件和显示的改变的修改和测试耗用了很多资源。
  2. 和数据库的连接部分,需要对数据表有比较清楚的了解,数据库部分发生变化,会导致从后至前的不少修改。
  3. 和传统开发项目一样,从产品经理-项目经理-程序员-测试,整个过程耗费时间,且修改总是容易引入新的错误。

我们将控台系统分为:

  • web 界面
  • 接口层
  • 数据库

web 界面层通过调用接口层来完成业务逻辑,接口层读取数据库来进行数据库操作。

整个基于 DSL 的设计流程如下:

  1. 使用 DSL 描述 web 界面,能够描述界面包含的元素。实际上,界面模板是固定的,另外制作好,我们需要填充的是左边栏的菜单,右边栏需要哪些标签、文本框、日期选择等,以及显示查询结果的表格。
  2. 我们有一个通用的 DSL 的语法检查器和解析器。根据我们预定义的 web 规则检查语法,然后将其再解析为 html 代码片段,便于填充到界面模板中。除了 html+css+js 以外,同时生成调用接口获得数据的 php 代码。
  3. 目前的 DSL 除了 for web 以外,就是 for sql 了,通过 for sql 的 DSL 来生成 sql 语句,然后通过另外一个通用查询接口,获得数据。
  4. 这个通用查询接口输入为 sql,输出为 json 的数据集,怎么和数据库连接,具体数据库位于哪里等细节都被隐藏起来,通过配置文件来设置。

应该说,开发这样一套系统,其实工作量并不小,有以下的好处:

  1. 一旦开发完成后,用其生成的系统,因为将业务逻辑和数据库逻辑做了彻底的分离,因此很多的修改变得非常容易,真正的通过 DSL 就可以修改业务逻辑。业务程序通过 DSL 来调用 DSL 的解析器,这些都有 Restful 接口实现,也算是一种专注于自己业务逻辑的准微服务架构。
  2. 复用性。在开发第二、第三套系统的时候,我们就会享受到这样设计的便利性了,特别是前面说到,类似于控台这样基本框架一致的系统。只要后台提供接口,通过 DSL 、html 模板等,访问数据库或者访问接口。有了这样的引擎,大大减少重复的工作量。

这算是我们对 DSL 来简化业务系统流程的初步思考,之后会再举例。而我们对于 DSL 的思考这还是第一步,我们也不满足这类技术只能做相对简单的控台。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注