表驱动编程简介
2014-08-11 22:11
204 查看
表驱动编程
表驱动法是一种编程模式(scheme)——从表里面查找信息而不使用逻辑语句(if和case)。事实上,凡是能通过逻辑语句来选择的事物,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链的越来越发杂,查表法也就愈发显得更具吸引力。——摘自《代码大全2》Table-DrivenMethods 表驱动法
就如《代码大全》里所说的那样,在适当的环境下,表驱动法确实拥有较大的优势,使用表驱动法所产生的代码逻辑更简单、更容易修改、效率更高,所以也更具扩展性。
在使用表驱动法的时候,必须解决两个问题。首先,你必须要回答怎样从表中查询条目的问题。你可以用一些数据来直接访问表。比如说,如果你希望把数据按照月份进行分类,纳闷创建一个月份表是非常直截了当的。你可以用一个小标心从1到12的数组实现它。其他的一些数据可能很难直接用于查表,例如,以IP地址为数据分类,那么表的下标为0~,否则,不能包含所有的IP地址。我们可以使用更为复杂的方法来索引,例如使用哈希算法求得一个相对较小的索引值,一般我们采用的查询条目的方法为:
l 直接访问
l 索引访问
l 阶梯访问
在使用表驱动的时候,需要解决的第二个问题是,我们应该在表里存些什么。可能表查询的结果就是数据。而有的情况表查询的结果是动作(action),我们可以直接存放实现该动作的应用,对于C/C++语言来说其为函数指针。
我们知道数据库可以为看作多个复杂的表的集合,既然这样,那我们也可以基于数据库实现表驱动法,我们可以将复杂的逻辑操作转换为数据表项,然后将该”逻辑数据表”存储到数据库中,例如,对于智能家居的安防设备处理,设备的报警触发我们可以将触发条件固化到程序里面,那样大概就是if … then else if …then的形式,对于简单的设备或则设备条件变化不大的情况下,我们可以使用方式,但是我们经常研发出新的安全设备,而且安全设备的报警触发条件是可以配置的,那么按照上面的逻辑我们就必须修改原有的代码,这样就会带来较大代价。这是表驱动法就显得比较好了,只要我们好好设计设备报警配置表,按照设备类型把设备的触发条件、触发阈值以及触发之后的联动处理都考虑进去,剩下的逻辑就只剩下根据设备类型,查找数据库然后做出相应的处理就行了。
相关文章推荐
- java框架简介1--spring+hibernate简介 2 用例驱动编程
- Linux 音频 驱动 接口 简介 之 OSS 编程 方法 采样频率 量化 位数 实例 driver interface
- 事件驱动的JScript面对象编程(例)
- C++Builder5.0调用SQLSERVER7.0驱动编程
- 教你在Java中实现3d编程简介
- 嵌入式操作系统VxWorks简介及编程方法
- Socket 编程简介
- UNIX的套接口(Socket)编程简介
- .NET Remoting编程简介
- UNIX的套接口(Socket)编程简介 (http://www.fanqiang.com)
- 揭开极端编程的神秘面纱: 测试驱动的编程
- 事件驱动的JScript面对象编程(例)
- 使用 Microsoft Visual C# 2005 Express Edition 编程简介
- 事件驱动的JScript面对象编程
- Symbian游戏编程入门 (三) 应用程序开发简介
- 事件驱动的JScript面对象编程(例)
- 事件驱动的JScript面对象编程
- window网口驱动编程
- 事件驱动的JScript面对象编程 选择自 Mykxxx 的 Blog
- 编程4年-Win32编程-基础编程-界面编程-核心编程-网络编程-驱动编程