1、聊一聊
今天跟大家推荐一曲纯音乐,能真正打动作者的就那么几首吧,它或许就是其中一首吧。
好了,今天为大家介绍数据驱动编程技巧,能够帮助大家在平时写出高质量的代码。
2、什么是数据驱动编程
作者一直觉得"没有设计思想的代码是没有灵*的",所以在这么多年的程序设计中一般首先设计程序架构然后再进行编码,之前作者为大家介绍了一下用“万能C编程”来引出"面向对象",应该有很多之前没有接触过这方面内容的小伙伴从中受益,同时也希望作者能够带来更多类似的文章,所以就有了该新作。
1
通过MP3来看看数据驱动编程这里拿MP3播放器作为一个例子为大家引出数据驱动思想,使用MP3播放器进行音乐播放需要有MP3格式的文件,并且不同的歌曲都会遵循该格式的文件依次存放。
那么对应的MP3播放器会按照MP3音乐文件进行对应的解析,这样对于不同的音乐文件都是统一的解析方式,并不需要换另外一种解析方式,以后我们想播放其他的音乐仅仅只需要添加对应的音乐文件即可,而并不需要再更新对应的音乐播放器。
同时当我们需要切歌、定义播放模式等等,仅仅只需要对播放文件索引进行逻辑处理即可,该实例就为我们展示了数据驱动思想的特点:认为数据易变,而逻辑相对比较固定,这样便把数据和逻辑分离,降低代码逻辑的重复,增强代码的聚合度。
2
数据驱动实现框架图在之前的文章中作者在介绍结构体的时候说到了一个妙处不知道大家还是否记得?大佬们都在用的结构体进阶小技巧,在该文中说到结构体可以囊括所有数据,并且几乎所有的事物进行抽象以后都可以归为数据,所以采用数据驱动开发也将是行之有效的思路。
分析一下:左边是所有的数据,包括用户的输入,所采集的数据、还有各种处理数据的方法都是数据,获得所有的数据以后,正常思路是直接编码进行数据解析,最终实现项目需求。
然而对于数据驱动开发,并不是立马进行数据解析,而是首先进行数据库设计,这里作者所谓的数据库并不是mysql什么的,而是一种数据结构,表明数据与数据的关系等,类似于前面提到的MP3格式文件。
设计好数据库以后,需要构造数据库解析的方式,该解析方式的目标是实现项目功能目标的全部或者是一部分,也就类似于前面提到的MP3播放器。
3、实现合集
对于数据驱动编程最大的难点在抽象出数据库和数据解析(有点类似于一个文本解析器),这两部分的设计的灵活度就决定了程序的扩展性和紧凑性。
目前比较简单的就是用数组等作为数据库,数据解析基本上是查表,所以也有很多小伙伴直接称为表驱动编程,然而对于数据驱动编程远远可以设计得比表驱动复杂,所以这也是在开发中选择数据驱动方法编码的一个决定因素。
下面作者还是以比较基础的实例跟大家分析分析:
1
状态机的实现参考demo:1#includestdio.h2#includestdlib.h34//构造数据5#defineSTATUE1(0)6#defineSTATUE2(1)7#defineSTATUE3(2)8#defineMAX_STATUE(3)intStatue1Process(intparam);11intStatue2Process(intparam);12intStatue3Process(intparam);13/***************************************14*Fuciton:数据驱动编程实例15*Author:(