【开发者的精进】 数据驱动下的程序设计

写在前面

  大雪至,风纷飞,夜里呜声伴秋叶,转眼2017也快要过去了,时间在不停的走,事情在不停的做,今年的秋叶落尽了,明年的春芽也就不远了吧。

  纵观程序千万,ui、功能、语法、运算、框架,都可以用数据两个字来囊括,二进制数据、xml数据、数据库数据。 数据的基本定义是:

数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。

数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据

在计算机系统中,数据以二进制信息单元0,1的形式表示

在我们的开发中,你很可能使用的是xml,json,有时候要使用到base64,,对象,数组,它们都是数据的展现,在开发中大部分人可能忽略了一个出发点,那就是数据驱动开发,在数据驱动下的开发事半功倍。

数据驱动开发

  那么什么是数据驱动开发?  我的理解是,它是一种顺序思维,我们在开发时,往往关注于功能点、一个代码单元、单个系统,这里我以一个web界面解释(博主擅长web),

日常,我们界面开发流程可能是这样的:

  1.需求A,一个web界面,如下图

  

 2. ok 一张个人中心界面,这里面有什么呢,

   ①.一个用户,包含头像,姓名等信息

②.两个记录表

 3.然后就开始开发了,

  

一般的思维,首先布局,头部》中间》底部》动画 ,然后请求服务器数据,最后把数据渲染到页面中。这符合我们一贯的思路,不论用什么框架,什么技术,流程大多如此,但是作为对比,我们来看看数据驱动下的界面开发

    

界面制作动手之前,我们需要设计一个数据模型,例如个人中心界面,这个简单的界面可以分为两块。

  1、用户信息

  2、相关信息

现在我使用json表示这个界面

{
    "user":{
    },
    "about_msg":{
    }
}

在用户信息里有用户名,头像,在相关信息里,有用户详细信息,报修记录,宽带记录,其中报修记录,宽带记录是有图标,有链接的,那么最后的数据模型应该是这样的

{
    "user":{
        "name":"zhangtaifeng",
        "img":"..."
    },
    "about_msg":{
         "user_detail":[
             {
                   "title":"姓名",
                   "value":"zhangtaifeng"
              },
             {
                   "title":"学号",
                   "value":"123456"
              },
             {
                   "title":"邮箱",
                   "value":"..."
              }
        ],
         "maintenance":{
             "icon":"../images/...",
             "href":"",
              title:"保修"
        },
        "buy":{
              "icon":"../images/...",
              "href":"",
              "title":"购买"
        }
    }
}                             

当数据模型准备完毕,界面的开发就变得简单起来,无论你是用什么样的框架都可以在这样的数据基础上,或循环、或模板引擎、或后台渲染,核心要求是,

数据必须在前面,数据改变,界面改变,如果界面更改了,数据没有同步,那么这些设计就变得毫无意义。

可以预见的是,一旦使用了数据模型驱动界面开发,那么这块工作是由难到易的,后期维护简单。

这还只是一个简单的个人中心界面。开发复杂的、大型的图形界面,数据驱动无疑是最好的开发方式。

要点

  1、数据模型需要在用户界面的前面,也就是说,数据更改,界面更改。不可以直接更改界面,就算重新设计,也需要首先从数据修改入手。

  2、你可以设置数据监听,改变时重新渲染界面。也可以做一个驱动函数,专门负责界面渲染,每次更改数据调用,例如:

var data = {name:"zhangtaifeng"};
//渲染函数
var changeView = function(data){
     document.body.innerHTML=‘<h1>‘+data.name+‘</h1>‘;
      return  data
};

changeView(data); //zhangtaifeng

setTimeout(function(){
    data.name="aaa";
   changeView(data); //aaa
},3000);

  前端,像vue angular react都提供了简便的watch方法。

3、尽量使页面数据化,如果你的项目不是依赖seo的话。

优势

  假如A和B开发了一个一样的界面,A和平时一样,写html...写js....请求数据。 B首先设计数据模型,然后设计驱动函数,然后写html,写js,请求数据。

  一开始看,A大多数情况下会比B快很多的,按通常流程走,符合逻辑。

现在老板需要增加一行元素,比如”我的订单“。

A需要修改html、增加js

  B只需要在数据模型上加一行”我的订单“就行了。

  类似的,如果要你保存页面状态,怎么办?   保存数据就行了。

  跳转登录,返回回填表单,保存数据就行了。

还有更多的好处。。。

结束

  传达一些想法,表示一些逻辑,实属不易,若笔头略有顿挫,诸君见谅,若观点也有偏差,望各位海涵,然君指出后,言出必思,思之必改,谢谢大家。

时间: 2024-10-10 08:48:37

【开发者的精进】 数据驱动下的程序设计的相关文章

在大数据驱动下必须加强积极防御“网络武器”的研发工作

"美国"网络武器"的研究已多达2千多种,其中最值得注意的是,"震网"病毒是世界上首个专门针对工业控制系统编写的破坏性病毒,被称为"网络空间的精确制导武器".它能够利用Windows系统和西门子SIMATIC WinCC系统的漏洞进行攻击.攻击西门子公司控制系统的数据采集与监视控制系统(SCADA),该系统广泛应用于能源.交通.水利.石油化工等领域,实现生产过程控制与调度的自动化."震网"病毒侵入系统后,对可编程逻辑控

Unity跟IOS原生开发项目融合记录参加微软打造开发者社会生态圈线下会议

昨天很荣幸受邀参加微软第一届为打造微软技术开发者社区生态圈现在会议,我是一名从.net转到unity的游戏开发者,也算半个微软技术圈的人,一直对微软技术比较钟爱,因为这个,我也”唆使”我的老婆成为一名.net开发者.参会的有来自各个技术社区和产业界的朋友.不但有.NET社区的,还有google.java.nodejs.linux等等开源社会的专家或者社区组织者共20余人.这届会议不同于以往只是主办人读PPT的流程,下面的参会者聆听而已,这次更多的是参会人员的发言和交流. 这次会议是微软走向开源,

Linux下C程序设计(4)----操作环境变量 、程序传递参数getopt getopt_long操作、获取时间

通过命令传递参数查看环境变量  /************************************************************************* > File Name: env.c > Author: > Mail: > Created Time: Tue 24 Feb 2015 10:42:21 PM PST *******************************************************************

递归向下语法程序设计

1 #include <stdio.h> 2 #include<dos.h> 3 #include<stdlib.h> 4 #include<string.h> 5 char a[50] ,b[50],d[200],e[10]; 6 char ch; 7 int n1,i1=0,flag=1,n=5; 8 int total=0; 9 int E(); 10 int E1(); 11 int T(); 12 int G(); 13 int S(); 14 i

详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点

作为一种对照实验方法,A/B 测试通过比较两个 (或多个) 不同版本之间的差异来验证假设是否正确.该方法将特定测试组从实验其余部分中独立出来,从而得出可靠结果.在被测人不知情且测试场景真实的情况下,A/B 测试得出的结果最为有效. 为使每个版本的样本群体具有代表性,A/B 测试平台随机让用户使用版本 A 或版本 B,或者将其排除在测试之外.测试平台须要确保用户在整个测试周期中体验一致 (总是 A 或总是 B),并向分析平台提供额外元数据以确定对指标的影响.一旦完成指标分析并确定最佳版本,您可以通

【新技术】免ios开发者账号申请ios证书打包ipa真机调试

虽然xcode现在可以免证书进行测试了,但众多跨平台开发者,如果还没注册苹果开发者账号. 想安装到自己非越狱手机测试是无能为力了. 不过新技术来了,只需要普通免费的苹果账号无需付费成为开发者就可以申请iOS证书打包ipa安装到自己手机测试,强大吧! 这个神器就是Appuploader,ios app测试及上架辅助工具. Appuploader安装教程 当然如果要上架App Store还是需要注册一个付费的苹果开发者账号. 如果只是安装ios应用到自己手机测试,现在只需要注册一个普通的苹果账号就行

CocosCreator游戏开发1——数据驱动的工作流

自CocosCreator起,Cocos引擎终于具备了数据驱动,组件式等现代游戏引擎的架构和功能,生产力得到了很大的飞跃--那么什么是数据驱动呢,网络上面的文章很多,本文尝试从工作流的角度阐释一二 两张图对比不同的工作流 如下图所示,传统的非数据驱动下,成品由业务逻辑+内容组成,一般是先搭架子后填肉的工作流,产品反馈周期长,迭代时间长 而数据驱动下(如下图),认为一切皆为数据(包括逻辑功能),此时程序和美术转而为策划人员提供"素材",支持策划人员进行世界编辑,最终完成成品.当然,完全靠

苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事(转)

WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<https大势已来?看腾讯专家如何在高并发压测中支持https>中介绍了腾讯WeTest在基于epoll的高并发机器人框架中加入openssl的方法支持HTTPS接口测试的方法,不仅介绍了具体的使用办法,并且了解到HTTPS注定会是未来的主流趋势. 而随着2016年行将结束,我们发现,这一天,已经越来越近了.

iOS下创建framewok(上)

iOS开发中,有时候需要将一些工具包装起来,做成sdk提供给客户使用,制作过程可以分为两种.一种是制作静态库.a文件,一种是制作成framework文件.前者操作起来简单,但是提供给客户时比较麻烦,需要提供头文件.后者使用简便,可以直接导入,但是制作较为麻烦. 苹果在iOS8之前都不支持动态库framework方法,所以这里说的framework实质上都是静态库文件.如果有什么理解和整理错误的地方,欢迎大家指出问题所在. 这篇文章主要记录创建framework的方法.创建framework也有两