最近对项目代码做的一些更改和感想

最近对项目代码做了一些更改,主要的改动是对整个界面框架的改变,因为以前写代码的时候,为了完成功能,没有从上帝视角来思考软件的界面设计,完全是需要这个功能了,怎么可以做到?好,就就这样吧,为了完成功能而对界面不停的修修补补,这样带来的主要坏处有很多:

一是,后续功能加进来的话,需要考虑的地方会越来越多,因为前面的代码耦合程度很高,比如onStart回调,有些事情,既可以在Activity的回调里面去做,也可以在Fragment的回调里面去做,既可以在这里做也可以在那里做,新增加一个功能进来的时候,不得不考虑在所有可能的地方都要检查一遍,然而这样可能还是无法完全考虑到所有情况,最后出现遗漏导致测试的时候报bug修改。

二是,维护现有的代码也很困难,比如测试或者产品突然冒出来一个新想法,要把原来的效果改成一种别的效果,看起来似乎不是很难,但是实现的时候发现真的很麻烦。。比如之前支离破碎的fragment,连我自己都不知道这个title到底是属于fragment还是属于acticity,整个界面的动画切入切出也很难做,因为他们根本就不是一个整体的。。

三是,代码写起来很丑。比如onbackPressed,需要先判断(xxxFragnemt != null ,xxxfragent.isvisiable(),xxxPopwindow != null)之类的鬼东西。。实在是太难看了。。

 

 

现在改动主要是考虑到了上面几点,主要的变化是,

1.界面和数据分离,比如界面A更新的时候,它也不需要考虑,我是不是也要更新B了,这些都抽出来交给上一层数据结构去处理。例如如果activity包含有很多fragment的话, 那么把这个activity单独抽出来,负责保存数据,在android的设计中,activity和fragment之间的消息通讯有很完整的解决方案,这样做也把activity从交错复杂的界面中解放了出来,它只负责保存和同步数据,通知界面更新状态,而fragment则只负责界面,显示数据。原来属于公共部分的界面,比如title,bottom现在分开到各个fragment里面去了,所以也需要一种同步的机制,这种需求的话交给activity去控制,比如观察者模式之类的,这是完全可以做到的,现在我只是暂时粗略的维护了一个fragment的链表,数据更新的时候依次通知各个子页面就可以了。

2.想办法提取一些公共的特性,把它们都放到基类里面去做,因为界面之间的耦合度降低了,因此很多交互的需求都可以抽象出来成为接口,让各个界面自己去响应对应的调用就可以了,比如前面所说的onbackPressed回调,现在activity根本就不用管这么多条件了,直接一次调用子界面的接口就可以了,而不用自己去检查管理应该调用哪一个界面,怎么响应。当然,因为这个交互的特殊性,只能有一个界面去响应,所以暂时改成了这个样子:

  

for(fragment x:fragmentList){ if(x.myBackPressed() ){break ;  }
}


这样改之后感觉逻辑处理上确实简单了很多,具体效果还有待确认。仔细想想,这一套似乎和MFC那一套十分相似。。。这次的改动也让我觉得,android和windows确实很多相似的地方,比如消息队列,比如这次的activty和fragment的关系,就和windows里面的各个窗口的关系差不多,只不过android把它抽象出来了而已。日子似乎又回到了我刚开始看PC客户端代码的时候,David跟我说,你主要需要弄清楚消息是怎样流动的。现在想想,一个框架的设计,的确最重要的就是消息怎样流动,怎样响应。它的结构清晰吗?它需要被消耗掉吗还是要通知到所有的地方?界面之间的消息,需要怎样相互通知?界面和框架之间,需要怎么通知?界面状态更新直接和同步,需要怎样通知?这些都是需要认真考虑的问题。

转载于:https://www.cnblogs.com/BezierCurve/p/4771943.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS常见的四种垂直居中的方法

面试中不管是笔试题还是面试题,一般很容易被问到如何实现垂直水平居中,这里总结四种方法作为参考 (1)margin:auto法 css: div{ width: 400px; height: 400px; position: relative; border: 1px solid #465468; } img{ position: absolute; margin: auto; top: 0; left: 0; …

对安卓应用进行加固签名,为上架各大应用市场做准备

上架安卓各大应用市场之前需要对自己的应用进行签名加固,签名是为了证明你是这个应用的开发者,软著也是一种方式,这是不做介绍,加固是为了从安全角度给安装包加一个保护层,防止被恶意破解及攻击。下面简单介绍一下签名…

大前端最强vscode教程(基础篇)

这段时间入职了一家外包公司的前端工程师岗位,前端编辑器用起来,前端一般会用到几个编译器,VScode、sublime text3、webstorm、Hbuid等,这里主要介绍VScode. 初次使用vscode时各种不适应,所有需要用到的功能貌似都需要单独安装插件才能用。这让很多初次使用vscode的朋友有…

edusrc0day挖掘技巧

网瑞达web资源管理系统0day ps: 作为在edusrc的小白,经常看见大师傅们的刷屏,我也很向往能像大师们一样有一次刷屏的机会,于是有了这一次的渗透之旅。 思路:要想刷屏上分,就得找系统来挖掘,对…

个人或者公司如何写版权认证的证明文件?

项目场景: 现在好多平台都在做知识付费,比如百度文库、CSDN、微博、头条、知乎等等,因此我想给大家做一些付费文档,想上传到百度文库的知识店铺 问题描述: 一般人不知道这个版权认证文件怎么写,怎么弄&am…

Bypass WAF实战总结

0X00前言 上个月刷了一波洞,然后这个月初远程支持了一个HW,在文件上传getshell的时候,碰到个各式各样的云waf,通过一个月的实战,总结了几个比较实用的技巧,文章总结的不全,只是基于我实战中用到…

Git教程学习总结(分享给热爱学习的你,团队的协作离不开你呀)

目录 Git 教程 Git 安装配置 Git 工作流程 Git 工作区、暂存区和版本库 Git 创建仓库 Git 基本操作 Git 分支管理 Git 查看提交历史 git log git blame Git 标签 Git 远程仓库(Github) Git Gitee Git 服务器搭建 Git 教程 Git 是一个开源的分布式版本控制系统&…

Linux的shell编写

-eq //等于 -ne //不等于 -gt //大于 -lt //小于 ge //大于等于 le //小于等于实验中遇到的问题: 1.NAMEuser1 中间不能有空格 2.[ xxx ] xxx前面和后面要有空格 任务1:使用case语句编…

为啥这么多程序员大佬学习Cortex-M3

Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的。CM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,…

Ffuf使用教程

kali安装教程链接:https://www.iculture.cc/cybersecurity/pig210 该工具用途广泛,可用于多种用途。一些用途: • 目录发现,可选择在 URL 中的任何位置进行模糊测试。 • 子域名发现 • 使用各种 HTTP 方法进行模糊测试。 安装 …

Burp Collaborator 使用总结

0x00:使用原因 我们在做渗透测试的时候,经常会遇到这种情况,测试跨站可能有些功能插入恶意脚本后无法立即触发,例如提交反馈表单,需要等管理员打开查看提交信息时才会触发,或者是盲注跨站,盲打 …

jrockit_1.6下载_Oracle JRockit Mission Control 4.1发布

jrockit_1.6下载Oracle发布了以前的仅JRockit专用工具Mission Control Suite(JRMC)的新版本。 4.1版本是次要版本升级,直接遵循4.0.1(该版本发布于2010年中期)。 但是,即使版本号表明是次要的升级&#xff…

dnslog盲注原理

Dnslog盲注原理 布尔盲注和时间盲注相当于猜单词的游戏,我们需要对每一位逐步的猜测,效率很低,需要发送很多的请求进行判断,很可能会触发安全设备的防护 我们需要一种方式能够减少请求,直接回显数据——Dnslog注入 Dn…

[学习笔记]批次需求计划系统-简要

一、该系统的目的二、系统特色(1)来源根据 如上图(2)仅仅补充需求来源的最大值,避免料件多买而造成浪费(3)可透过[发放LRP工单]将生产计划发放成正式工单(4)可透过[发放LRP採购单]将採购计划发放成正式的请购单或者採购单(5)系统会记录计划的来源单据,方…

在浏览器控制台执行以下代码,输入的结果是()

在浏览器控制台执行以下代码,输入的结果是(A) A.4400 4401 4399 4400 B.4400 4401 4401 4402 C.4400 4400 4399 4400 D.4400 4401 4399 4402 E.4400 4401 4401 4400 解析 js在执行之前

iOS-心跳

转载于:https://www.cnblogs.com/zhuyaguang/p/4800703.html

google国内镜像网址收集

搞IT的遇到问题,光靠baidu有时真的解决不了问题,所以时不时的就需要求助google😂, 里面有好多国外网友的博客、stackoverflow、github issues、官方文档等等的大量一手英文资料, 但是因为种种原因国家一直不放开Google…

mongo-express 远程代码执行漏洞(CVE-2019-10758)

前言 mongo-express是一款mongodb的第三方Web界面,使用node和express开发。如果攻击者可以成功登录,或者目标服务器没有修改默认的账号密码(admin:pass),则可以执行任意node.js代码。 影响版本 mongo-express&#xff…

【转】深入浅出PageRank算法

原文链接 http://segmentfault.com/a/1190000000711128 PageRank算法 PageRank算法是谷歌曾经独步天下的“倚天剑”,该算法由Larry Page和Sergey Brin在斯坦福大学读研时发明的, 论文点击下载: The PageRank Citation Ranking: Bringing Order to the We…

https://blog.csdn.net/weixin_40412037/article/details/112235003

一、工具简介 说明: 这是一款基于主机的漏洞扫描工具,采用多线程确保可以快速的请求数据,采用线程锁可以在向sqlite数据库中写入数据避免database is locked的错误,采用md5哈希算法确保数据不重复插入。 本工具查找是否有公开e…