被忽略的方法之-mini-lanaguage

mini-language方法,在UNIX领域流传很久。但没有进入软件设计方法的课程。 在这个“面向对象”的时代,有许多这种传统的好的设计方法被忽视了。 在《The Art of Unix Programming》中,整个的第8章和《The Pragmatic Programmer》的第12节都对这个方法进行了介绍。 DB2DB是我开发的一个程序。完成数据库之间数据的传输。用户在配置文件中指定源数据库和目标数据库;指定读取数据的SQL语句和插入数据的SQL语句。DB2DB在源数据库中读取数据,并对返回的每一条数据,在目标数据库中执行插入数据的SQL。因为DB2DB通用性好,被广泛的应用的公司的项目中。这个程序的设计,正是使用了mini-language的方法。 要设计通用的程序,关键之一是程序的可配置性,就把选择权交给用户,用户通过配置程序决定程序的行为。考虑一个极端的情况,一个很复杂的应用,用户可能使用一种语言来配置程序的逻辑,程序通过对配置文件解释执行,完成用户希望的功能。使用这种极端的方式思考,甚至可以把编程也看成写配置文件,比如:把SHELL脚本看成配置文件,SHELL解释程序通过对配置文件的解析和执行,完成开发人员设计的动作。 当然,大多情况下,没有必要设计一种完整意义的编程语言。这种起配置作用的不完整语言,称为“mini-language”。像/etc/passwd这样的文件使用的格式,就可以看成简单的“mini-language”设计;而像awk脚本这样的语言,可以看成一个复杂的“mini-language”,复杂到几乎和一个编程语言相当。在实际中使用mini-language方法,会设计一种针对特定问题领域的,简单的专用的语言。使用这种语言表达程序需要的信息,把最容易变动的逻辑使用这种语言描述,保证了程序通用性。 首先要确定使用mini-language要描述什么信息?描述这些信息需要使用到哪些概念?选择的概念应该尽量接近问题领域,语言尽量保持简单,也要考虑容易实现。比如DB2DB的变量定义文件,要表达的信息:把源数据库哪些表的数据导入到目标数据库的哪些表。我使用了普遍熟悉的SQL的概念,来设计它的语言,方便配置也方便实现(把SQL的解析和执行工作都交给数据库)。 可以考虑下面的思路:程序代码要实现的是一个引擎,这个引擎实现几个基本的原操作。使用“mini-language”定义一个原操作的序列。程序通过解释mini-language的代码,完成操作序列,完成程序功能。比如在DB2DB中的几个原操作,获取当前时间;通过指定SQL计算需要信息;通过指定SQL读数据;通过指定SQL把读取的数据插入等等。 如果把mini-language的配置看成是元数据。这种设计方法实际上是,抽象一个合理的模型,在代码中实现,而把具体的细节放到元数据中。其思想是:把知识放到要处理的数据或配置中,程序的逻辑保持简单,简单逻辑的程序更容易实现,也更可靠。 要设计好的mini-language, 要懂一些编译原理的基本知识。还可以使用Lex,Yacc,javaCC等工具自动生成解析的代码,当然如果语言很简单,就没有必要使用这些工具,只需要懂得一些编译原理中介绍得算法,自己实现解析代码很容易。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值