从零搭建Android框架Android-Tractor(二) 关键问题

从零搭建Android框架Android-Tractor(二)关键问题

前面我们说了程序是工具,并且从工具的角度得出了程序的四个基本组成部分:操作识别、业务逻辑、外部数据、视图显示。它们属于What的领域,接下来,我们走进How,看看它们是怎么建立起来的。不过,在真正动手之前,我们是不知道到底应该怎么组建,心中没有答案,只有疑问。所以,在这一篇,我主要把这些疑问提出来,后面的篇幅,再以解决这些问题为目的,来看看有哪些可选择的解决办法。

我们可以想象一下,在实际的开发活动中,如果让我们接手一个新的模块开发,我们会怎么做?我觉得可能会从这几个方面入手:

1.         这个模块是干什么的?

2.         和外部怎么交互(接口问题,也可以说成是输入、输出)?

3.         内部怎么实现?

所以我们拿这三个问题来分别”一下程序的这四个组成部分。不过,主要问题还231在上一文章中已经问答了,在这里还是要再重复一下,目的是保证它们的完整性。

操作识别

操作识别的目的是为了识别用户意图,并且得到相关数据参数。那么操作能被识别,首先需要知道这个操作。当用户按键盘的时候、移动鼠标的时候、滑动手指的时候,程序需要知道这个操作正在进行。所以这就涉及操作识别的输入接口问题:

谁,从哪,怎么知道操作发生了?

如果这个问题给解决了,那么接下来,这个操作到底属于什么行为就是一个问号了。有的同学,可能说直接就知道啊,比如按钮的 ClickDouble Click等等。但是,按钮AClick和按钮BClick,导致的行为是不同的。换句话说,我们的这个操作不是对视图来说,普遍的用户动作,而是对程序业务而言的特定行为。并且有些视图动作,并没有很好的封装,比如说Android手势操作中的缩放、旋转、移动等。操作识别的内部职责主要就是来根据数据分析和当前的场景来判断操作的行为意图,但是要真正落地,还是有问题:

谁来分析操作数据,得出操作意图?是操作接受者,还是其他对象?

操作意图得知后,就需要把这个意图给程序的其他部分,这作为操作识别这部分的最后一个问题,也是接口问题,属于输出部分:

怎么把操作意图发送出去,发给谁?

业务逻辑

业务逻辑的目的就是针对不同的业务行为请求,来调整转化,最后改变外部数据。调整转化是业务逻辑的主要内部职责,并且不同的程序都有自己的业务逻辑,所以我们不探讨它们的内部问题,而把目光主要集中在接口部分。

谁,从哪,怎么得到业务请求?

我们可以简单说明一下谁的问题。打比方说,程序是一个公司,业务是公司的业务部门,一个公司可能有多个业务部门。业务部门A里有员工123。是员工123都从市场部门接受业务呢,还是由某一个员工比如说员工1专门去市场部分拿到业务,然后回来再分配给23

怎么得到业务请求,换句话说就是通讯问题,比如说,A要和B通讯,怎么办?大概有这几种办法可供选择:

(1)      主动的办法:有两种

a)      直接:获得B,调用B的接口。这个估计最常用,直接方便。怎么得到B也有几种策略,我们有机会再说。

b)      间接: A把通讯的内容封装,传递给C,由C再传递给B。就像送信一样,我们把要说的话放在信封里,然后给邮递员,邮递员再把这个信给BB需要解封信息,然后看到真实内容。

(2)      被动的办法:让B来取,A只需要暴露信息即可。

上面的是输入接口,输出接口就是:

谁,怎么把转化的结果,发送给外部数据?

这里的怎么和上面的一样,它们有多种办法,需要我们在动手的时候做出决定,到底采取哪种策略。

外部数据

外部数据的目的就是初始化数据、获得数据更新以及保存数据。它有两个主要的输入接口,一个和上面几部分差不多:

谁,从哪,怎么得到数据更新?

另一个是关于数据初始化的,在上一篇文章里我们讲过为什么需要数据构造也就是初始化,我们不再重复了,这里我们关心的是:

谁初始化数据?

这里又提到,可以是“自己人”,也可以“人”自己人就是外部数据部分内部的对象,别人可能就是程序的其他部分或者模块里的对象。不管是自己人还是别人,都有两种选择,就像上面业务逻辑里提到的那样,一种可以说成是专人,一种可以说成是所有人。

这里为什么没有呢,这里的一般都是程序外部,比如内存、硬盘、网络等等,所以我们不关心。

输出的接口就是:

谁来保存数据?

视图显示

视图的目的是为了显示外部数据以及一些辅助性显示。视图由控件组成,控件的显示分为两种:一种是内容显示、一种是皮肤显示。比如说一个按钮,内容显示就是它的文字或者图标、皮肤显示就是内容旁边的效果,比如说背景、透明度等等。所以视图的输入也有两个:

谁,从哪,怎么得到内容的改变?

谁,从哪,怎么得到皮肤状态改变?

视图在获得内容或者状态改变后。需要把这些数据应用到视图上,所以需要了解:

谁,怎么应用数据到视图?

这里的怎么涉及数据到视图的转化,可能包括对数据的解析,比如说文本框可改的属性有文字内容、文字颜色,文字内容对应String类型,文字颜色对应Color类。而数据是另一个类,它有两个属性,分别是StringColor,所以就需要分解该数据对象,把它的属性和文本框的属性对应上。也有可能包括一些视图逻辑,比如说文本框是作为一个学生成绩的显示控件,数据就是一个String类型的对象,直接给控件就行了,但是因为控件有意义,是成绩,所以这个String一定可以转换成数字才行。更进一步,当这个数字小于60的时候,文本颜色需要变成红色,起警示的作用。

当数据应用到视图后,屏幕上的视图则产生了变化,这就是我们所需要的,也就是视图的输出。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值