从线性代数和矩阵的角度,我获得一个灵感,是关于如何操作U I界面的。
一, 图形界面的静态部分
1, 将需要显示的每个数据元素,以及相应的U I元素,组成一个对象。例如有n个这样的对象。每个对象有名字,有类型,有绑定到数据库的表的属性,有UI元素的属性等,有显示错误时提示信息的属性等。
2, 把这n个元素,排成n行1列的列向量,放在一个数组里。
3,如果这些元素间有父子关系,则用邻接矩阵的概念,来做一个连接,渲染时也会根据邻接矩阵来渲染。
4,这个列向量,其实也是一个矩阵了,里面的每一个元素,都有若干个属性,即维度。
二, 图形界面的动态部分
1, 对图形界面的所有的动作,实际上都对以上定义的那个列向量的变化,可以简化成对整个列向量的一个操作。
2,如果列向量的UI方面数值变了则更新UI,如果数值方面变了则更新到数据库。
3, 把界面上的状态变化,抽象成状态以及事件驱动下的状态转换,并写出状态转换矩阵,一切界面上的变化应该是被这个矩阵所涵盖。如果有新的需求,将修改这个状态转换矩阵。
以下是一个简单的状态机矩阵
webwxgetmsgimg.png那么,综上,一个图形界面的解决方案如下:
第一步,定义界面矩阵
把界面上所涉及到的元素及所包含的数据,映射成一个1行n列的向量。该向量其实也就是一个矩阵,因为向量中每个元素有多个维度即属性。
第二步,定义操作符
定义若干操作符,把界面上一切变化,都反映成向量和向量经过某操作符后,被渲染的结果。
第三步,定义状态转换矩阵
如上述,需要定义出来根据事件整个界面如何变化的状态转换矩阵。
第四步,定义状态转换时所做动作
用矩阵运算的形式,来写出状态转换时所做的操作。
原则上,定义了以上两个矩阵和若干操作符,和相应矩阵操作后,这个界面的编程就告结束。
用矩阵化思维考虑UI问题时,有以下几个特征:
1, 整体化考虑,把整个界面看作整体。
2, 抽象化,一切看作向量,一切UI表现和数据表现,都是向量的呈现。
3, 界面的一切变化,都是向量变换,向量之间通过定义好的操作符的运算,转换成了新的向量并被渲染到界面上。一切以前“鸡零狗碎”的UI场景,都应该能归一到此。
用矩阵的概念想UI问题,其实是受到机器学习科目的影响。矩阵化思维减轻了思维负担。使我想起,学到解析几何后,那种通过数字机械操作就能证明出传统几何学难题的快感。
以上是一个理想化的考虑。具体如何,需实验后才知。
网友评论