设为首页 加入收藏

TOP

程序结构设计理论(Android)(三)
2019-09-26 11:11:59 】 浏览:276
Tags:程序 结构设计 理论 Android
dataA, dataB计算出来,就认为dataC包含的信息与dataA, dataB包含的信息重复;
此时应该去除dataC变量,用DataTypeC functionD(DataTypeA dataA, DataTypeB dataB)来代替;

3.避免逻辑功能重复

避免逻辑功能重复有两种情况:
A.避免应用层代码的逻辑功能和底层框架的逻辑功能重复;
B.避免应用层代码的逻辑功能和应用层代码的逻辑功能重复;

例子:

ViewGroup containerView = findViewById(R.id.xxx);
LinearLayout layout = new LinearLayout(mContext);
layout.setLayoutParam(new LayoutParam(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
layout.addView(new TextView(mContext));
containerView.addView(layout);

这段代码的功能和LayoutInflater.inflate()的功能重复;
用XML文件实现界面布局,代码会更简洁;

4.避免配置信息重复

和避免变量信息重复类似;
有几个配置数据dataA、dataB、dataC:
如果存在一个函数体functionD,以dataA, dataB作为输入,输出等于dataC;

dataC == functionD(dataA, dataB)

即dataC可由dataA, dataB计算出来,就认为dataC包含的信息与dataA, dataB包含的信息重复;
此时应该去除dataC配置,用functionD(dataA, dataB)来代替;

六、功能模块的硬件层与软件层,输入、事件与动机

1.功能模块的硬件层与软件层

App的功能模块一般包括文件、显示、网络、声音;
这里考虑包含文件、显示、网络功能模块的App;
各个功能模块包括硬件层、软件框架层、软件应用层;
这三个功能模块的分层如下:

模块    文件           显示        网络
硬件层   磁盘           屏幕        网卡
软件框架层 File, SQLite, SharedPreference View,Activity,Fragment HTTPConnection

文件功能的软件应用层:
File:对文件的增、删、改、读(读取);
SQLite:对数据库的增删改查;
SharedPreference:put、get、clear;

显示功能的软件应用层:创建与销毁视图、切换显示与隐藏、输入数据(比如文字)、填充或提取数据、动画、页面跳转;
网络功能的软件应用层:输入请求参数、请求并延时、输出请求结果、消息推送;

2.输入、事件与动机

事件的定义:由于用户或某个设备向程序输入的数据满足某个条件,引发了监听器方法的执行,称之为一次事件;

这三个功能的事件如下:
文件:文件或文件夹改变的事件;
显示:触屏事件(包括onClick, onLongClick, onTouch, TextWatcher.onTextChanged等);
网络:获得推送消息的事件(Http请求与回调视作一次时间稍长的执行,Http回调不视为事件,就像动画那样);

哲理2:任何有数据输入的功能模块都可能引发事件;程序执行的动机是事件,即事件推动了程序执行;

对于这三个功能:
文件功能中文件或文件夹改变相当于输入了文件或文件夹名称以及改变类型,当改变发生在所监听文件夹内,就会引发事件;
显示功能输入了触摸屏幕的位置数据,当触摸的点落在设置了OnClickListener的View的区域时,就会引发点击事件;
网络功能输入了消息推送的数据;

七、双向绑定与即时更新

1.双向绑定与即时更新

双向绑定的定义:在显示模块中,视图组件与显示模块数据相关联;视图组件包含的数据变化时,即时更新到显示模块数据;显示模块数据变化时,即时更新视图组件;

除了即时更新的方式提取数据,就是临时从视图组件提取数据;

2.双向绑定的应用场景

应用场景:双向绑定应用于可编辑的列表;
可编辑的列表的列表项视图一般有编辑框、CheckBox等,或者可添加项、删除项等;
对于不是列表的视图组件,可以在任何时候方便地从中提取数据,因此不需要双向绑定;
对于不可编辑的列表,只需要向列表填充数据,不改变数据;

A.例子一:
列表项视图中有编辑框,且编辑框里的文字对应列表的数据项的某字段的值;
因为列表视图有回收机制,所以这样的列表是无法随时从视图组件的所有项提取数据的;

B.例子二:列表的数据删除一项,需要调用notifyDatasetChanged()即时更新视图组件;

八、内部结构与外部关系的架构模式(Internal Structure and External Relations)

目录

1.内部结构与外部关系的哲理
2.方法的外部关系
3.基础模块、及其内部结构与外部关系
4.基础模块的单纯性与单纯化重构
5.不满足单纯性的一般性例子
6.多个基础模块包含事件方法时的单纯化重构
7.对基础模块初始化逻辑的单纯化重构
8.对方法进行拆解封装重构
9.对类的拆解封装重构
10.事件是程序执行的动机
11.中间类的性质,与外部关系模块
12.Java桌面应用程序的一般形式
13.Android应用程序的一般形式

1.内部结构与外部关系的哲理

哲理3:任何一个本体都具有内部结构与外部关系,一内一外构成其整体;
例如:一条数据记录或者一个程序模块都有内部结构和外部关系;

[如图-本体的内部结构与外部关系]

2.方法的外部关系

定义:当方法A内,调用两个或两个以上其他方法(B1、B2、…Bn)时,方法A就是方法B1、B2、…Bn之间的一种外部关系;
之所以说是“一种”是因为,可能B1、B2、…Bn之间还有方法A2、A3等其他的外部关系;
例子A:

public static void main(String[] args) {
    functionI();
    functionJ();
}

private static void functionI() {
    sentenceA();
    sentenceB();
    sentenceC();
    sentenceD();
}

private static void functionJ() {
    sentenceE();
    sentenceF();
    sentenceG();
    sentenceH();
}

functionI()中的语句是functionI()的内部结构;
functionJ()中的语句是functionJ()的内部结构;
同时调用了functionI()和functionJ()的main()方法是functionI()和functionJ()的外部关系;

3.基础模块、及其内部结构与外部关系

六.1中所定义的文件、显示、网络等模块下面称为“基础模块”;
基础模块具有的六.1中所列举的功能是基础模块的内部结构;

基础模块的外部关系的定义:
当一个方法内,调用了两个或两个以上基础模块的代码时,这个方法就是这些基础模块之间的外部关系(下面简称“外部关系”);

4.基础模块的单纯性与单纯化重构

单纯性的定义:某个基础模块内部没有直接调用其他基础模块,就称这个基础模块满足单纯性;
结论1:任何基础模块之间的直接相互调用都会使基础模块失

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇11.Django基础九之中间件 下一篇Nexus-在项目中使用Maven私服,De..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目