读书笔记----App研发录 第一章 重构

Obsidian小白入门:重建你与文字的关系 Obsidian 是一款基于纯文本和双向链接的知识管理工具,其核心原理在于将笔记转化为可追溯、可关联、可演化的知识网络。不同于传统文档编辑器,它通过本地优先架构、Markdown 语法和图谱化连接,赋予用户对信息结构的完全主权。技术价值体现在思维显性化、知识复用自动化和长期可迁移性上;典型应用场景包括学术研究、内容创作、项目管理和个人认知提升。本文聚焦 Obsidian 新手最易卡点的认知重构、知识库搭建、双向链接实践与关键插件落地,帮助用户跨越‘工具操作’层面,真正建立可持续生长的思考操作系统。 阅读详情

读书笔记—-App研发录 第一章 重构

感谢

  作为从ROM开发转行到应用开发的我来说,本书真是为我打开了一扇大门。正如作者所说,ROM开发不能算作应用开发,我们空有扎实的Java语言功底,却在应用开发处处碰壁。书籍概括了整个应用开发的流程,并且以一定的高度分析App竞品。这让我大大的收益,在此感谢作者的无私奉献。


第一章 重构

1.1 重构的过程

一,建立AndroidLib类库,将于业务无关的公用逻辑存放到库中.


com.infrastructure.activity
com.infrastructure.cache
com.infrastructure.net
com.infrastructure.ui
com.infrastructure.utils

  • activity包中包含 BaseActivity业务无关的的公用逻辑
  • net包中存放网络底层封装,AsyncTask.
  • cache包含数据缓存和图片处理相关
  • ui 自定义View
  • utils包含各种通用的工具类

二,将主项目中的类按照一定的规则划分,放入主项目的包中


  • activity :分模块继续化包
  • adapter
  • db :SQLite相关的逻辑
  • entity :实体
  • engine : 业务先关的类
  • ui : 自定义控件
  • utils : 公用方法
  • interfaces : 接口(intercace)
  • listener : 基于Listener的接口

  原则上是不出现嵌套类的形式,这个跟我做ROM开发时很不一样,在底层开发中的高内聚的特点,内部类很常用,所以不能完全否定内部类的用法。


如何建立依赖关系
* Android中建立AndroidLib

在菜单File -> New Module…选择Android Library

此时已经生成了目录以及相应的gradlew脚本

settings.gradle会成为include ':app', ':baselib'

最后在app的build.gradle中添加依赖项compile project(path: ':baselib')

完成


1.2 为Activity定义新的生命周期

  四大组件的生命周期是由AMS通过handler机制去hook周期函数。重新定义生命周期并不是改变这一生命周期的调用函数或顺序。而是将生命周期中的工作模块化(方法化)。

示例

public abstract class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initVariables();
        initView(savedInstanceState);
        loadData();
    }

    protected abstract void initVariables();

    protected abstract void initView(Bundle savedInstanceState);

    protected abstract void loadData();


}

  此时集成父类的子类就可以不重写Activity的生命周期函数onCreate(),保证了更细化的单一职责的设计模式。在编写代码的过程中,向”父类层次抽象“能有效的提高代码的可读性,降低冗余。

public class AppBaseActivity extends BaseActivity {
    @Override
    protected void initVariables() {

    }

    @Override
    protected void initView(Bundle savedInstanceState) {

    }

    @Override
    protected void loadData() {

    }
}

1.3 统一事件编程模型(体现面向对象的思想)

        /* 面向对象的Click写法 */
        btnLogin = (Button) findViewById(R.id.btn_Login);
        btnLogin.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //避免代码臃肿
                        gotoLoginActivity();
                    }
                }
        );

1.4 实体化编程

AndroidStudio导入GSON,只需要在项目设置中添加Lib依赖项就可以了
compile 'com.google.code.gson:gson:2.7'

Gson gson = new Gson();
        WeatherEntity weatherEntity = gson.fromJson(content, WeatherEntity.class);
        WeatherInfo weatherInfo = weatherEntity.getWeatherInfo();
        if (weatherInfo != null) {
            tvCity.setText(weatherInfo.getCity());
            tvCityId.setText(weatherInfo.getCityId);
        } 

在组件之中传递实体需要用到序列化,实现Serializable接口或者Parcel接口

intent.putExtra("String", entity);//发送
getIntent().getSerializableExtra("String");//接受

1.5 Adapter模板

  利用实体化编程以及面向对象的编程的思想,将ListView的显示分装,作为普通的View去显示,而点击事件的处理等,操作,应该放到ListView的外部。符合单一职责。

1.6 类型安全转换函数

提供一个工具函数,转换失败就返回默认值
convertToInt

    public final static int convertToInt(Object value, int defaultValue) {
        if (value == null || "".equals(value.toString().trim())) {
            return defaultValue;
        }
        try {
            return Integer.valueOf(value.toString());
        } catch (NumberFormatException e) {
            try {
                return Double.valueOf(value.toString()).intValue();
            } catch (NumberFormatException e1) {
                return defaultValue;
            }
        }
    }

substring()函数的越界问题

    String convertStr = "T";
    String needStr = "";
    if (convertStr.length() > 1) {
        needStr = convertStr.substring(1, 2);
    }

重构手法简介

参考自:Android开发进阶,从小工到专家 ————何红辉

重构的原因

优化代码

  无论什么时候,代码的规范性,合理性是程序员入职的首先要求,作用自然不言而喻。而现实是代码一直在演化,在改进。而改进的过程就可以成为重构的过程。而改进的过程是需要随时进行的。

常见重构手法

  1. 提取子函数
      我们在第二节的时候所用到的手法的第一步,就是将代码符合单一职责,提取并封装成一个个单独方法。

  2. 上移函数,字段到父类
      这是一个继承原则的最好体现,将子类公用的代码上移到父类。改变父类就改变了所有子类。

  3. 下移函数,字段到子类
      这个过程并不是与上面的相反,而是提取出差异,新建父类继承共性添加差异,组成新的共性父类。

  4. 封装固定的调用逻辑
     这个很好理解,类似于链式启动,将固定的逻辑封装为方法。

  5. 泛型编程
     泛型编程适用于操作逻辑一样,但是具体的操作对象不一样。

  6. 避免使用过多参数(实体化编程)
     总而言之,实体化编程更容易让人理解,同样更容易操作,上边1.4节就是最好的体现

  7. 转移函数
     转移函数解决了类型之间的过度耦合问题,类A频繁的调用类B中的一个或一组方法,而类B调用此方法不频繁。这时候需要将B中的方法转移到A中。

  8. 将类型码转换为状态模式
     基本原则多态的简单应用,这涉及到一个java的涉及模式状态模式(对象行为型)。简单的介绍:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
    适用性:
     1,一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。
     2,代码中包含大量与对象状态有关的条件语句:一个操作中含有庞大的多分支的条件(if else(或switch case)语句,且这些分支依赖于该对象的状态。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。

  9. 什么也不做的对象—NullObject
     空指针异常(NullPointException)是非常常见的异常,我们为了避免空指针异常,通常在使用这个某个对象的时候要进行判空判断(在我的一个项目中,一个线程新New出来对象,传入另一个线程执行却报了空指针,复现率很低。最终原因是因为Java虚拟机允许CPU乱序执行,导致线程中对象可能还未创建成功,已经换了线程。最终引入volatile或者单例才能解决。)所以,空指针是防不胜防的。如何良好的处理空指针是代码重构的很重要的一环。
     实现方式:创建一个空的对象实现功能接口,在获取这个的时候,判断是否为空,如果为空,则返回空对象的实例。1.6 节的思想也是类似的。

总结

 其实我们对代码的重构,本质上遵循了六大设计原则。这是编码的根本准则,只有遵循这些准则,才会让代码避免恶化的脚步。拥有更好的扩展性,易读性和便于维护。

作者 [@PirateBrook]
2016 年 10月 20日

从混合到融合:提升创意与产品设计的深度整合策略 在信息处理和系统设计领域,资源整合是提升效率与价值的关键。其核心原理在于超越简单的物理叠加,通过化学式的深度反应实现元素重构与新生。这一过程的技术价值在于将异质元素转化为有机整体,产生一加一大于二的协同效应。在实际应用场景中,无论是内容创作、产品设计还是跨部门协作,通过明确核心目标、解构原材料、设计融合流程及统一风格,可以实现从功能堆砌到体验闭环的转变。例如,在互联网产品设计中,将用户交互流与数据反馈机制深度融合,能显著提升用户体验与产品粘性。本文以“Mix It Up and Mix It In”为心法, 阅读详情

相关推荐

【企业管理】【管理科学】企业全岗位综合运营与组织知识矩阵体系01

岗位类别核心职责工作内容(详细)协作模式协商焦点博弈策略信任建立机制序列化工作流程关键绩效指标研发类​技术创新与产品开发1.需求分析:R=f(U,M,T) 2.概念设计:C=D(S,B) 3.原型开发 4.测试验证 5.文档编写敏捷团队、跨功能协作技术方案、资源分配、优先级纳什均衡:ui​(si​,s−i​)≥ui​(si′​,s−i​)代码审查、技术分享、结果透明瀑布模型/敏捷迭代1.专利数量P 2.技术就绪度TRL 3.缺陷密度D<0.1/KLOC其中:U=用户需求,

weixin_49199313的博客 744

一篇文章,告别Flutter状态管理争论,问题和解决

状态管理, Flutter, 移动端,我们创造工具,使用工具,改进工具,才有软件的繁荣。不一定非要讨论那个框架或技术有高低差异。在实际开发中,稳定,熟悉是稳定三角的另外两个重要的方面,不同的框架的缺点,总会有一些或者优雅,或者败絮其中的解决方案,在项目中,最重要的适合,合适的工具会让我们开发过程事半功倍,其次是稳定性和学习难度, 不过,一切都需要合适的权衡(trade off)动态的去匹配当下最重要的事。

PirateBrook的天梯 1899

基于 Quest 摄像头数据开发的原理介绍【Unity Meta Quest MR 开发教程】

比如想在识别到的现实物体上叠加虚拟物体,需要知道这个现实物体在 Unity 的世界坐标下的哪个位置,是带有 x,y,z 三个轴的数据的。而 WebCamTexture 捕捉到的图像只是个 2D 的平面,没有三维世界的深度信息,我们通过物体识别算法识别到的物体坐标只是在这个 2D 平面上的一个屏幕坐标,可以理解为 Quest 拍摄了一张照片,我们识别到这张照片上的某个像素点为需要识别的现实物体的中心。是不是看起来比较复杂?Quest 的相机访问功能是在安卓的。

qq_46044366的博客 2104

View基础知识

VIew的位置参数 top: 左上角的纵坐标 left: 左上角的横坐标 right: 右下角的横坐标 bottom: 右下角的纵坐标 Attention: View在平移过程中,top和left表示的是原始左上角的位置信息,不改变,改变的是x, y, translationX 和 translationY;View的实现@UiThread public class View implements

PirateBrook的天梯 443

Bochs源码分析 - 26:8259中断控制器介绍

前言 现在我们跟着《x86/x64体系探索及编程》来分析17章内容 -- 8259中断控制器。这个是涉及硬件的,很遗憾,除了大学期间使用STM32搞过一个计算器,其余就没多少硬件编程经验,我在淘宝上找了下大概是这个东东。 https://pdos.csail.mit.edu/6.828/2010/readings/hardware/8259A.pdf 上面是8259A的芯片手册,里面讲的还是挺详细的,虽然里面很多东西还是看不太懂,但是结合着《x86/...

WriteAnything_的博客 967

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 422

推荐学习!关于网络优化你必须要知道的重点,顺利通过阿里Android岗面试

经历 坐标湖南,双非一本毕业。毕业后跟发小一起到深圳找工作。发小国防科大软件工程毕业。几乎没有太多周折,轻松入职了中国平安。像我这种双非渣本,随便在深圳拉一个外卖小哥出来学历可能都比我高。 前期找工作的过程是比较痛苦的,两个星期后我终于找到了我的第一份offer,一家刚起步的互联网小公司,Android开发岗。公司很小,开发团队实际上就4个人。APP从框架搭建到项目开发,版本发布更新后期运维,都是自己做。 之后就是各种跳槽,辗转过很多公司,积累了一些项目经验,走走停停都是些小公司。随着时间的推移,感觉自己的

Sunbuyi的博客 367

基于NXP1778的CAN自动波特率检测

一、概念 NXP1778芯片内部自带一个CAN控制器。CAN模块由两部分组成:控制器和验收滤波器。所有的寄存器和RAM都以32位字宽度来访问。 CAN自动波特率检测主要用于以一种CAN的转换的产品中。产品中CAN部分的波特率以前都是通过网页中修改然后配置下去的,依据实际情况的考虑,如果CAN部分的波特率能够根据客户设备的改变而自动改变,将会增加其灵活性。   二、原理 根据CAN控制器的

菜鸟的痕迹专栏 5271

Android面试翻车实录:5年开发,惨败在简历上没写组件化“这个”项目,腾讯高级开发岗必问知识点!

Android从2008年10月发布至今已有快12年了,开发者们从Android 1.0的版本跨越到了Android 11。在这个过程中,我们经历了很多。 对于如何去衡量一个开发者的水平到底有多高,一般我们会看他会什么,能干什么。 如果是一个刚入行的新手,水平大概是初级开发者,那么公司对他的要求就不会太高。 但是在咱们Android行业有太多伪装的新手,3-5年工作经验的“新手”。那么新手一般如何开发的呢, 项目架构毫无章法,代码毫无设计模式,性能体验毫无快感。 所以我们会发现水平的高与低,完.

weixin_44339238的博客 605

定制PYNQ的overlay

一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。             (3)在左侧的菜单栏里选择Sourc...

bramblewalls的博客 1万+

基于Stateflow的驱动电机控制系统模式管理与安全策略研究

摘要 本文基于Stateflow状态机建模工具,研究了驱动电机控制系统的模式管理架构与安全策略实现方法。通过分析电机控制系统的工作模式,设计了包含初始化、待机、校准、对齐、运行、故障、复位七种状态的有限状态机模型,并建立了三级故障处理机制和降额保护策略。基于Simulink/Stateflow搭建的仿真模型实现了模式切换逻辑和安全管理功能,验证了系统能够正确响应各类控制事件,故障处理机制可有效保护系统安全。研究成果为电动汽车电机控制系统的工程开发提供了参考。 关键词:Stateflow;驱动电机控制;模式管

AI的内部世界的博客 58

实战企业级项目 践行App重构之路

疾风剑豪 1088

智能家居系统设计:基于MATLAB的智能家居系统设计和仿真,包括智能家居控制、家庭能源管理和家庭安全监控

基于 MATLAB 的智能家居系统设计方法可以有效地解决各类智能家居问题。

走向CTO的路上... 1775

[读书笔记]《APP研发录》第一章

《APP研发录》读书笔记第一章1.1重新规划Android项目结构重新规划Android项目的目录结构,分两步走: 建立AndroidLab类库,将与业务无关的逻辑转移到AndroidLab,AndroidLab至少包括五大部分:包名+ acticity,cache,net,ui,utils 。activity包里面存放的是与业务无关的Activity基类。 net包里存放的是网络底层封装。 cac

陶程的博客 1334

AI翻译工具自动翻译日语视频生成srt中文字幕,支持离线轻松生成任意日语视频字幕!可选择支持显卡模式和cpu模式低显存也能用

【AI离线字幕神器:日语视频一键转中文字幕】推荐一款基于Faster-Whisper的本地化字幕工具,可离线生成日语视频的中文字幕(.srt格式),支持CPU/GPU加速处理。实测1小时视频最快4-5分钟完成翻译,无需联网保护隐私。操作简单只需拖拽文件,支持批量处理音频(mp3/wav)和视频(mp4/mkv)文件,还能自定义输出格式和参数调整。特别适合需要观看无字幕日语资料的用户,堪称技术宅必备神器。下载地址附后,包含详细使用教程和参数配置说明。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《App研发录》读书笔记

这本书基本上涵盖了移动开发中常见的关注点,之所以用关注点而不用技术点这个词是因为这本书并没有讲到具体的技术实现,但提供了行之有效的解决方案。读这本书的时候非常有感触,它很多的框架设计和解决方案与我实际开发中都是不谋而合的(有点自夸的意思哈)。所以也非常感谢作者能这么详细的记录下来。这篇读书笔记是记录我在阅读过程中感觉需要重点强调的地方和自己的一些理解,也供大家能快速的浏览本书的章节。 关于重构 对于

天盟 - 技术博客 - Eamon 1208

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

App 研发录、架构设计、Crash分析和竞品技术分析------读书笔记(第一章)

第一章:重构 1、要新建一个AndroidLib类库,将业务无关的逻辑转移到AndroidLib,一般来说包含五在部分 activity:存放的是与业务无头的activity基类, net:存放网络请求相关的 cache:存放缓存数据和图片相关的处理 -ui:存放的是自定义控件 -util:存在工具类 2、为主项目的分类就根据情况来 activity:存在所有activity adapter

757

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

《互联网+智能家居--传统家居颠覆与重构》(陈根)读书笔记及总结

《互联网+智能家居--传统家居颠覆与重构》读书笔记 一、什么是智能家居 真正智能家居时代是多种技术和各种传感器技术高度融合,软硬件体验做到极致各种服务非常舒心的时代。         能够让用户真正地体验到智能生活带来的便利的产品,才能打动用户,赢得市场。 目前自能家居还停留在物与物之间的连接,而智能家居的核心是让产品智能化后为生活服务,因此人与产品的智能互动是最终目标。而可穿戴设备可

qq_34006630的博客 2548

互联网+颠覆还是被颠覆(读书笔记)

互联网+颠覆还是被颠覆(读书笔记)

孤独的糖三角 1934

《场景革命》读书笔记

场景革命   互联网定义下的场景: 场景是最真实的以人为中心的体验细节。 场景是一种连接方式。 场景是价值交换方式和新生活方式的表现形态。 场景构成了时间、地点、人物、事件、连接方式。 第一部分 正在发生的场景革命 第一章 长在朋友圈的碎片化场景 互联网时代的消费机制和生活意义都是基于场景的游戏规则塑造。 场景成为移动互联网时代我们与世界的连接方式 微信是基于连接的...

hebeind100的博客 1928

思源笔记:一个隐私优先的开源知识管理系统如何重构你的思维

在数字化时代,我们的思维被海量信息所淹没。你是否曾想过,有没有一种工具既能帮你整理知识,又能保护你的隐私?思源笔记(SiYuan)正是这样一个革命性的开源项目——它不仅是一个笔记软件,更是一个完整的个人知识管理系统,以其独特的块级架构和隐私优先的设计理念,正在重新定义知识管理的未来。 ## 🧠 思维重构:从线性文档到网状知识 传统的笔记软件大多采用文档为中心的线性结构,而思源笔记则引入了革命

gitblog_00209的博客 960

互联网+医疗健康(读书笔记)

互联网+医疗健康 读书笔记

孤独的糖三角 3442

认知卸载与增强:从工具使用者到思维协作者的跃迁

认知卸载是人类节省脑力的自然策略,指将记忆、流程或验证等心智任务外包给外部工具;其底层原理源于大脑能量守恒与神经可塑性调节机制;技术价值在于提升效率与降低认知负荷,但若缺乏主动干预,易导致情境记忆弱化、提问能力萎缩等隐性退化;典型应用场景覆盖知识管理、AI辅助研发、教育设计与创意生成;真正的认知增强并非功能叠加,而是通过‘协同启动窗口’实现人机间前额叶皮层与工具推理引擎的动态耦合——这正是当前知识工作者亟需掌握的核心能力,也是本文聚焦的认知接口重构实践。

weixin_33957648的博客 532

斩获36K AI产品经理offer!普通人的职业转型路径,藏着这些关键逻辑

斩获36K AI产品经理offer!普通人的职业转型路径,藏着这些关键逻辑

m0_48891301的博客 1053

普通人用豆包AI赚钱的四条可行路径实录

AI工具变现的本质,是将大模型的能力转化为可交付、可复制、可验证的数字服务。豆包作为深度适配中文场景的AI助手,凭借角色固化、本地化服务链路和合规稳定性,在信息加工、内容生产与流程提效等基础能力上展现出突出的落地确定性。相比追求技术参数的通用模型,它更擅长解决职场人真实存在的周报写作、小红书起号、简历优化、知识整理等高频刚需。本文基于三个月23,864元真实入账记录,系统拆解四条经过验证的变现路径,涵盖获客逻辑、模板化SOP、避坑细节与交付包装,为零基础用户降低试错成本,提供一条不依赖流量运营、无需专业资质

460

2021-09月报

0、产品设计 技术人员的一点产品思维思考 亚马逊发布两款自有品牌电视,10月上市起价370美元 华为邱真:打造智慧家庭新体验,构建万物互联的智能世界 鸿蒙的愿景是把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界,智能家庭是非常重要的战略,希望大家和我们共同做大鸿蒙生态! 成思科技吴彦泽:构建新媒体和互联网桥梁,以技术驱动内容无界传播 引领新媒体运营革新,帮助媒体人完成使命,是成思的使命! 亚信科技殷泽祥:预见让家庭真正充满智慧的服务!

天空24的专栏 383
上一篇: 一个新的开始,用博客记录自己的成长
下一篇: App研发录第二章
PirateBrook
博客等级 码龄11年 90粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值