当前位置:  编程技术>移动开发
本页文章导读:
    ▪王家林的软件复建最佳实践        王家林的软件重构最佳实践                                  王家林官方博客链接 重构培训的重要性     软件质量,不但依赖于架构,设计以及项目管理,而且与代码质量紧密相关.这一点.........
    ▪ Toast 反复显示完善解决方案        Toast 重复显示完善在我们做项目时,有时会用到Toast来给用户提示某些信息,可当用户视而不见时,连续重复的操作就会让Toast不停的在页面上显示,很是影响用户体验,经过我的一段时间摸.........
    ▪ ARM寄存器中a1、ip的含意 ARM寄存器的别名       ARM寄存器中a1、ip的含义 ARM寄存器的别名AMR寄存器的别名 + APCS ARM中的寄存器的别名 默认的情况下,这些寄存器只是叫做r0,r1,...,r14等,而APCS 对其起了不同的别名。 使用汇编器预处.........

[1]王家林的软件复建最佳实践
    来源: 互联网  发布时间: 2014-02-18
王家林的软件重构最佳实践
                                  王家林官方博客链接

重构培训的重要性

    软件质量,不但依赖于架构,设计以及项目管理,而且与代码质量紧密相关.这一点,无论你使用什么开发技术,都不得不承认.

    什么是好的代码?可以工作的,性能良好,不出bug的代码,就是好的代码吗?世界大师Bob大叔认为,软件代码应该基本3个职责:

    第1职责:运行起来所实现的功能,这是代码得以存在的原因.

    第2职责:它要应对变化,因为几乎软件需求都有变化,因此代码应该保证将来的修改尽可能的简单.

    第3职责:要和阅读它的人进行沟通,对模块不熟悉的人员应该能够比较容易理解.

    因此所谓好的代码就是,除了满足所有功能需求以外,还应该更好的支持易修改和易扩展,同时应该清晰准确地传递作者的思想.因此代码质量与整洁度成正比,干净的代码,不仅在质量上较为可靠,也为后期维护,升级奠定了良好的基础.该课程给出了一系列有效的重构实践,均来自现实项目的正,反两面的范例.只要遵循这些实践,就能编写出干净的代码,从而有效提升代码质量.

    这是实践是软件公司最佳实践,也是软件公司难以大幅度提高生产力的关键所在。然而很多企业的技术高管都在抱怨自己的技术人员:

    1、编程序效率太差,一个简单的功能,很久时间才能完成开发实现;

    2、不动脑,经常犯很多弱智的错误;

    3、代码质量很差,程序结构不合理;

    4、写了7~8年程序仍然没有程序的味道,而且还养成了许多坏的编程习惯;

    5、基本功不扎实,学习了面向对象和设计模式,根本不会使用;

6、难于适应需求变更,每次增加新功能都是浪费大量时间。

如何提高代码质量,提高程序员的生产力?本课程正是为此而生。

课程特色:

本课程注重实战,采用案例贯穿方式完成实践,收集了大量的真实案例,针对项目过程中技术人员常犯的错误进行了汇总,研讨,并最终形成培训教程。本次培训从程序员的编程思维开始讲解,通过大量的真实案例,贯穿了设计、编码、重构、单元测试,持续集成等整个软件生命周期过程,详细地介绍了重构需要注意的要点以及难点,是重构最佳实践的心血结晶。

时间

內  容

备注

第一天

第1个主题:重构概述和软件代码新视角

内容一:软件代码的新思维----代码就是设计,代码质量决定软件可维护性

1.        软件可维护性(为什么必须重视软件的可维护性)

2.        代码质量概述

3.        破窗效应

4.        对代码的重新认识---代码就是设计

5.        优秀代码的评价标准

6.        好代码和糟糕代码之间的区别

7.        劣质代码的代价

8.        大师评价整洁代码的标准

a)         Robert C Martin

b)         Kent Beck`

c)          Ward Cunningham

d)         Ron Jeffries

e)         Grady Booch

f)          Dave Thomas

内容二:重构思想

1.  重构概述

2.  何时重构

3.  如何发现哪些地方需要重构

4.  如何保证重构的正确

5.  如何测试重构

6.  通过一个小案例演示重构的基本思想(什么时间重构,如何发现重构点,如何保证重构的正确性,最后如何验收)

内容三:案例—通过实际项目演示重构

1.        介绍项目需求情况,进行设计

2.        阅读代码指出代码坏症状

3.        通过重构逐步改善代码质量

第2个主题:必知的21中代码坏味道---如何发现重构点

内容一:21种代码坏味道—代码的质量底线

1.        代码坏味道概述

2.        代码坏味道的分类

3.        代码坏味道----低级篇(重复的代码、过长的函数、过大的类、过长的参数列表、发散式变化、分散的修改)

4.        代码坏味道----中级篇(伪面向对象的调用、数据泥团、基本类型的误用、switch-case结构的误用、平行继承体系、过薄的类、只有局部意义的成员变量)

5.        代码坏味道----高级篇(过度耦合的消息链、过薄的中间对象、紧耦合类、相似的类、只有数据的类、滥用类的继承关系)

6.        通过案例,让学员寻找代码坏味道

7.        可以根据客户现在的项目作为案例进行现场分析,找出相应的代码坏味道

内容二:某项目分析----重点了解现实项目代码的充斥大量坏味道

1.        介绍项目需求情况,阅读现有代码指出代码坏症状

2.        不看不知道,代码到底有多烂—触目惊心的代码

3.        通过重构逐步改善代码质量

4.        本案例学习多种重构方式

 

第3个主题:重构技术---怎样对先有代码重构

内容一:重构技术

1.        重构名录

2.        介绍常见的重构技术

3.        分别通过相关案例展示重构手段

内容二:重构工具

1.        重构工具概述

2.        使用IDE重构工具进行重构

3.        重构工具的使用标准

4.        重构工具的使用心得

5.        通过案例演示如何通过重构工具完成重构

内容三:重构案例—该案例重点  函数和函数调用重构

1.        函数的重构

2.        函数调用重构

3.        函数参数的重构

4.        重复代码处理策略

5.        通过案例介绍函数的重构

内容四:重构案例—该案例重点 复杂条件表达式重构

1.        复杂条件表达式重构

2.        IF/Else语句的危害

3.        Switch语句的危害

4.        通过案例介绍如何重构面向过程代码到面向对象

内容五:重构案例—该案例重点学习代码格式和命名

1.        代码格式规范

2.        代码命名-名副其实

3.        很重要,但是总被忽略的基本功

4.        通过案例介绍代码格式以及如何使用IDE工具进行定制格式

5.        通过案例介绍代码的命名,以及如何重构

内容六:重构案例—该案例重点 数据结构重构

1.        数据结构重构

2.        通过案例介绍如何重构面向过程代码到面向对象

内容七:重构案例—该案例重点 对象职责和对象重构

1.        过程化思维和面向对象设计

2.        对象的重新思考

3.        职责驱动的对象设计

4.        通过案例介绍如何重构面向过程代码到面向对象

第4主题:代码质量度量---不度量就无法考核,通过工具进行度量

内容一:代码质量度量

1.        代码质量的度量

2.        Chidamber & Kemerer度量,

3.        Depth of Inheritance Tree(DIT)

4.        Number of Childre(NOC)

5.        Response for a Class(RFC)

6.        Afferent/Efferent Couplings(CA/CE)

7.        Lack of cohesion in methods(LCOM)

8.        业界其他度量标准

9.        通过分析多个实际项目,分别度量相关是否标准

内容二:代码评审

1.        代码评审前期准备

2.        代码评审的代码量

3.        代码评审的检查表

4.        代码评审的总结与学习

5.        通过案例分析如何做好代码评审

内容三:单元测试

1.        单元测试概述

2.        单元测试的范围

3.        哪些代码需要单元测试

4.        单元测试的时机

5.        单元测试设计原则

6.        通过案例学习单元测试的应用

 

时间

內  容

备注

 

 

 

 

 

 

 

 

 

 

 

 

第二天

第5主题:代码分析工具与持续集成

内容一:代码静态分析工具

1.        代码静态分析工具概述

2.        以Java语言代码静态分析工具为例介绍

3.        CheckStyle:用于编码标准

4.        PMD 的 CPD:帮助发现代码重复

5.        Coverlipse:测量代码覆盖率

6.        JDepend:提供依赖项分析

7.        Metric:有效地查出复杂度

8.        其他语言相关代码静态分析工具

9.        通过案例演示工具在项目之中的应用

内容二:持续集成

1.        持续集成概述

2.        持续集成的要点和原则

3.        构建策略和最佳实践

4.        持续集成对代码分析的支持

5.        通过案例演示如何利用持续集成完成代码检查和代码分析

第6个主题: 设计重构---敏捷设计核心思想(演化式设计)

内容一:什么是好的设计以及如何预先设计实现

1.        什么是好的设计和衡量的手段

2.        可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

3.        灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

4.        可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

5.        软件的变化分析---发现变化/封装变化/隔离变化

6.        分析真实项目,如何预先设计,给我们哪些启示,我们可以学习到什么

内容二:重构与设计----敏捷设计思想(演化式设计或者反思性设计)

1.        重构与设计的思想---根据代码坏味道改善设计

2.        软件需求不可预测性----设计师不可能进行预测式设计

3.        软件设计的重构

4.        软件演化式设计---敏捷的设计思想

5.        分析某电信项目,如何设计重构,给我们哪些启示,我们可以学习到什么

内容三:通过代码指标进行设计重构

1.        代码指标和可视化有助于识别代码的重要部分,从而识别设计坏味道,进行重构设计

2.        相关代码指标(HIT 继承树的高度/NOP 包的数量/NOC 类的数量/NOM 方法的数量/LOC 代码行数/CYCLO 圈复杂度/CALL 每个方法的调用数)

3.        分析案例主要讨论两个指标,圈复杂度(cyclomatic complexity) 和传入耦合(afferent coupling), 介绍显示和理解这两个指标的一些工具,以及如何通过组合指标帮助发现设计特征。

内容四:案例—某项目设计重构案例分析

1.        案例情况

2.        演示如何发现设计坏味道,以及如何重构

第7个主题: 重构到模式---学习设计模式必由之路

内容一:重构到模式

1.        软件设计的基本原则

2.        设计模式概述

3.        设计模式的本质论

4.        设计模式如何适应变化和封装

5.        重构到模式的思路

内容二:案例---重点介绍重构基本类型依赖和对应模式

1.        通过案例学习以下重构到模式手段

2.        以State取代状态改变条件语句

3.        以Strategy取代条件逻辑

4.        以Composite取代隐含树

5.        以Interpreter取代隐式语言

6.        转移装饰功能到Decorator

7.        用Builder封装Composite

8.        重点学习案例的重构到模式的过程

内容三:案例---重点介绍重构代码重复和对应模式

1.        通过案例学习以下重构到模式手段

2.        构造Template Method

3.        以Composite取代一/多之分

4.        引入Null Object

5.        用Adapter统一接口

6.        用Fatory Method引入多态创建

7.        重点学习案例的重构到模式的过程

内容四:案例---重点介绍重构代码过长/过大的类/方法和对应模式

1.        转移聚集操作到Vistor

2.        以Strategy取代条件逻辑

3.        以Command取代条件调度程序

4.        转移聚集操作到Collecting Parameter

5.        重点学习案例的重构到模式的过程

内容五:案例---重点介绍条件逻辑过度复杂和对应模式

1.        以Strategy取代条件逻辑

2.        以State取代状态改变条件语句

3.        转移装饰功能到Decorator

4.        引入Null Object

5.        以Command替换条件调度程序

6.        转移聚集操作到Visitor

7.        重点学习案例的重构到模式的过程

第8个主题:架构重构---大型项目架构案例分析

内容一: 架构重构

1.        软件架构概述

2.        遗留系统的软件架构恢复

3.        软件架构的重构时机

4.        软件架构的重构步骤

内容二:案例分析—某web网站架构重构

1.        项目背景以及相关需求

2.        软件架构的演进与重构过程

3.        质量属性对软件架构的驱动

4.        架构的可扩展性架构

5.        缓存技术在架构之中的应用

6.        Web层的架构策略

7.        中间层的架构和集群策略

8.        大型并发系统Session的复制和容错架构策略

9.        数据的架构

10.      软件架构的重构策略

内容三:案例分析—某电信项目架构重构

1.        介绍项目需求情况,进行设计

2.        通过重构逐步实现设计的可维护, 可重用

3.        应用管道与过滤器/元数据/微内核等架构模式

4.        应用AOP架构思想

5.        应用设计模式(Command/ Observer/Proxy/Chain of Responsibility )

6.        通过案例学习架构的重构策略和步骤

 


 

 


    
[2] Toast 反复显示完善解决方案
    来源: 互联网  发布时间: 2014-02-18
Toast 重复显示完善

在我们做项目时,有时会用到Toast来给用户提示某些信息,可当用户视而不见时,连续重复的操作就会让Toast不停的在页面上显示,很是影响用户体验,经过我的一段时间摸索,总结出一个小经验

我的是:自己创建一个Toast 类MyToast,供自己调用,里面只一个函数:

public static  mToast(Context context,String msg){

    if (MyToast.mContext == context)
      {
           mToast.cancel();
           mToast.setText(msg);
     } else{
           MyToast.mContext = context;
           mToast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
    }
  return mToast;

}

在调用的地方直接调用即可:

MyToast.mToast(context,"你好").show();


    
[3] ARM寄存器中a1、ip的含意 ARM寄存器的别名
    来源: 互联网  发布时间: 2014-02-18
ARM寄存器中a1、ip的含义 ARM寄存器的别名
AMR寄存器的别名 + APCS
ARM中的寄存器的别名

默认的情况下,这些寄存器只是叫做r0,r1,...,r14等,而APCS 对其起了不同的别名。

使用汇编器预处理器的功能,你可以定义 R0 等名字,但在你修改其他人写的代码的时候,最好还是学习使用 APCS 名字。

一般编程过程中,最好按照其约定,使用对应的名字,这样使得程序可读性更好。

关于不同寄存器所对应的名字,见下表:

Table 3.2. ARM寄存器的别名

寄存器名字 Reg# APCS 意义 R0 a1 工作寄存器 R1 a2 " R2 a3 " R3 a4 " R4 v1 必须保护 R5 v2 " R6 v3 " R7 v4 " R8 v5 " R9 v6 " R10 sl 栈限制 R11 fp 桢指针 R12 ip 内部过程调用寄存器 R13 sp 栈指针 R14 lr 连接寄存器 R15 pc 程序计数器

                  The following register names are predeclared:

  • r0-r15 and R0-R15
  • a1-a4 (argument, result, or scratch registers, synonyms for r0 to r3)
  • v1-v8 (variable registers, r4 to r11)
  • sb and SB (static base, r9)
  • ip and IP (intra-procedure-call scratch register, r12)
  • sp and SP (stack pointer, r13)
  • lr and LR (link register, r14)
  • pc and PC (program counter, r15).

  •     
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3