http://blog.csdn.net/doon/article/details/5946862

1。何谓数据和界面分离?

GUI,即Graphic User Interface,人机交换界面。连接两端:终端用户--内部逻辑。它关联到两个角色:使用者和开发者。

用户希望看到的是,一个一个的界面元素:窗口、按钮、输入框等等可视和可操作的元素;开发者希望看到的是数据,数字、字符串或者数组、表等数据结构。

传统的GUI,例如Gtk,Qt,Windows,甚至有Android等界面,基本上是把界面和数据混在一起的。一个输入框,它表示的是一个字符串(当然,也可以派生出一个数字输入框),一个list框保存的是一个字符串列表等。

从开发者的角度看,必然先得到这个对象,才能读取数据。

但是,如果我们深入思考,开发者无非希望得到一些数据而已,不关心数据是以何种风湿展示的。对这些数据进行分类,可以发现,其格式可能非常有限,如基本的数据类型有数字型和字符串型;基本的数据保存方式有:表型(包括数组、各种链表等),树形等结构。

当然,根据领域的不同,还有很多区分,如,数字型可以进步细化为整数、实数,以及货币类型等和现实应用相关的类型。这些类型都是对数字型加以特定条件的约束而定义的。

这些基本的类型,可以和多种GUI的元素绑定,如数字型,可以和标签组件、输入框等绑定;而表型则可以和list等控件绑定。

这样,我们就可以把整个划分为两部分:

1。数据部分:提供给开发者使用的接口,只和业务逻辑相关,和如何展示无关

2。现实部分:展示给用户的,它可以使用各种效果,却不影响业务逻辑的变化。

2。为什么要做这样的分离?

做这样的分离,其实有很多好处:

1。界面编程会变得很简单,因为开发者只要学会有限的数据类型就可以了。

2。是为了解放界面编程,更好的实现界面的可视化。我们都知道,一个界面元素(widget或者控件),它的编程很困难,需要定义良好的接口,这种接口实际上要提供给很多方面使用,如

1) 提供给开发者使用

2) 提供给特定的工具使用,让它生成界面的描述资源

而一个界面元素开发完成后,往往觉得不够美观,不能适应用户的需求,往往需要做很多定制,甚至重新开发。往往事倍功半。

那么,把数据分离出后,数据的接口将标准化,而界面元素不必费尽心机的制定界面接口了。实际上,接口可能只是为了给特定工具使用了。

3。界面和数据分离,其实可以让界面的渲染和数据的存储脱离,可以实现界面后台渲染。这对界面的丰富度和响应时间都是质的飞跃。

界面可以更加从容的实现界面的诸多特效。

而且稳定性也会大幅度的增加。

3。如何实现?

界面和数据分离,关键制定界面数据的交换方式。这是框架所需要的。

在以后的讨论中,我考虑类似服务器和客户端的模式,通过定制一系列的协议来理清它们之间的关系。

GUI进化--数据与界面分离的更多相关文章

  1. Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准

    Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准 1. 界面gui方面的前后端分离重大意义1 2. 业务逻辑也适当的迁移js化1 3. 常用分离方法2 3.1. 页面 ...

  2. Jmeter(七)Jmeter脚本优化(数据与脚本分离)

    午休时间再来记一记,嗯..回顾着使用Jmeter的历程,想着日常都会用到的一些功能.一些组件:敲定了本篇的主题----------是的.脚本优化. 说起脚本优化,为什么要优化?又怎么优化?是个永恒的话 ...

  3. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

  4. Win7下使Users数据与程序分离

    大家知道,数据是用户最大的财富,但Windows系统默认的模式是将所有软件都安装在C盘,在Windows XP时代,数据文件夹会放在Document And Setting 目录下,在Win7时代,数 ...

  5. C++彩色数据流动界面

    一个数据流动界面 #include <windows.h> #include <time.h> #include <cstdio> #include <str ...

  6. 一种数据与逻辑分离的Python单元测试工具

    一种数据与逻辑分离的Python单元测试工具 几个概念 TestCase TestCase是一个完整的测试单元,最小的测试执行实体,就是我们常说的测试用例. TestSuite 以某种特性将测试用例组 ...

  7. ArcGIS API for JavaScript 入门教程[3] 你看得到:数据与视图分离

    这篇开始正式讲API. 数据和视图分离不是什么奇怪的事情了,这是一个著名的设计--数据与视图分开. 转载注明出处,博客园/CSDN/B站:秋意正寒. 目录:https://www.cnblogs.co ...

  8. 【转帖】远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)

    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm) https://zhuanlan.zhihu.com/p/310 ...

  9. adminMongo:mongoDB node GUI(mongoDB图形化界面)

    adminMongo:mongoDB node GUI(mongoDB图形化界面) 获取项目项目 克隆:git clone https://github.com/mrvautin/adminMongo ...

随机推荐

  1. 【WIP_S9】图论算法

    创建: 2018/06/01 图的概念 有向边 有向图 无向边 无向图 点的次数: 点连接的边的数量 闭路: 起点和重点一样 连接图: 任意两点之间都可到达 无闭路有向图: 没有闭路的有向图 森林: ...

  2. 如何在html中引入jsx文件

    不使用webpack工具做react项目 1.引入react相关js文件 <script src="https://cdn.staticfile.org/react/16.4.0/um ...

  3. POJ3715【二分匹配-增广】

    题意: N个人,有两种人,M对亲密关系,问最少删除几个人达到没有亲密关系. 思路: 最大匹配 = 最小独立集,删掉该人对最大匹配数的影响,如果没有影响,删不删都无所谓,如果有影响贼删除: 类似HDU1 ...

  4. Node.js 的回调模式

    我们都知道在javaScript中,如果在head标签里面引入script脚本,在打开web的时候,浏览器会先加载head中的信息,再加载body的信息: 如果head中有link标签,浏览器会开启一 ...

  5. 用EnumSet代替位域

    用EnumSet代替位域   如果一个枚举类型的元素主要用在集合中,一般使用int枚举模式,将2的不同倍数赋予每个常量: // Bit field enumeration constants - OB ...

  6. Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  7. 第二十一篇 .NET高级技术之使用多线程(三)

    1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它 ...

  8. 慕课笔记-Java入门第三季

    1.自定义异常 自定义异常必须继承Exception类或者其子类. 2.字符串 String对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象. 多次创建的字符常量,Java编译程序只 ...

  9. java 阻塞队列(转)

    转自 http://ifeve.com/java-blocking-queue/ 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列 ...

  10. noip2017普及组

    过了这么久才来写博客,也是我这么一段时间都很低迷吧.... 老实来说,今年应该是要打提高组的...可还是打了普及组... 其实最猥琐的还是我连普及都写挂了,作为一个学了两年的人,图论,进阶dp都写过的 ...