三天看完一本书,说出来我都不信,不过我还真是史无前例的做到了, 现在分享一下我的收获,希望大家拍砖,共同讨论一下.

  <<会说话的代码>>一书是我们BJDP小组里的王洪亮老师的一本著作,第一次听王老师分享时,就被王老师的技术折服了,如果大家在北京,有兴趣的话可以参与我们这个"北京设计模式学习小组(BJDP)"(免费参与哦), 相信每一个人都会有所收获 .

  还是说回书,这本书主要阐述了怎么样让我们写的代码具有自我的表达能力,让每一个程序员都能看懂,而且易扩展和维护.主要从以下几个方面着手:命名,注释,风格与结构,架构.(以下内容是我从书总结出来,再加上自己的理解,如有不对,与作者无关哦)

  1. 命名:

    1)最好全要英文,不要加入地方特色(拼音,法语之类),

    2)最好不要使用缩写,相似单词太多了,对con-有太多的猜测,(除那些约定俗成的)

    3)最好不要超过16个字符,太长不容易看懂,而且命名太长可能是设计上有问题.

    4)见名知义,无意义的名字最好不要起:temp,a,para1,list (循环变量除外).

    5)包或项目的名称:组织/公司+项目+功能/模块,如.Microsoft.Windows.Common.Controls这样能避免与第三方模块集成出现重名的情况.

    6)接口不要以I开头,有时一开始定义的接口,改着改着就成了抽象类了,此外要说推荐,就推荐使用-able结尾表能力,如Cloneable,Runnable.

    7)基类要选用具有通用意义的名词:Model,View,Control.有些抽象类可以加前缀Abstract+

    8)方法命名:动词(+名词).这里名词根据实际情况可有可无,如果有的话,根据返回值的情况确定是否用复数形式.

    9)考虑使用时样子如类名LeapYear,方法名isLeapYear,初看都不错,但使用时就发现LeapYear.isLeapYear()不如LeapYear.isLeap()更好.

    10)常量都大写,单词多的话之间采用下划线,常量多的话可以通过开头词进行分组.

    11)多使用对应词语:

min      max    positive negative  start stop    begin end  source destination  from to previous current next  create destory  plus minus
connect  close(disconnect)  upload download add remove add sub enable disable pause resume open close initialize finalize   request response
success fail bottom top include exclude input output import export width height up  down valid invalid push pop
get set first last befor after            
                 

  

  2. 注释

    1)如果有版本管理工具,那么就不要修改记录的注释了.

    2)如果你还不知道todo那就要查一下啦

    3)JavaDoc不是万能的,对那些需要指明的地方,还需要我们特别注释.

    4)异常处理中 如果catch不做任何处理,那就需要写注释.

  

  3. 风格与结构

    1)看看自己写的代码是否整齐,IDE可以帮助我们缩进对对齐,以表现出更好的代码层次关系.

    2)长方法,我个人理解超出一屏就太长了,IDE的Rafactor就派上用场了:提取方法,或者看一下是不是这个方法做了不该它做的事.

    3)某行太长,每次只能拖到滚轮才能看全的行,是不是太长了呢,

    4)去掉false 和true:if(candidate.visible==false)与if(!candidate.visible)哪个更好一些呢.

    5)长参数列表,有的书说参数个数可以是7+-2,本人作者建议参数小于3,最好一个都不要.我觉得如果架构设计的好的话,可以实现(有难度啊),起码是个方向.具体方法是:引入参数对象或提取字段.

    6)长分支:if else或swich Case.解决办法有:合并同类项(减少代码),状态/策略模式(会生成多个类,可以通过配置文件进和步简化),

    7)魔法数字与魔法字符串:硬编码在代码的数字或字符,不仅不易修改,而且还看不懂它是什么意思.用配置文件试一试.

    8)去掉return前的判断:比较以下三段代码:你会发现....

 //first para
public boolean hasMore(){
boolean flag=false;
if(list.size()>){
flag=true;
}
return flag;
} //second para
public boolean hasMore(){
if(list.size()>){
return ture;
}
return false
} //third para
public boolean hasMore(){
return list.size()>
}

    9)嵌套过深圈复杂度越高,越容易引起Bug,主要的方法有:提取方法(虽然实际上没有减少层数,不过会改后续重构提供方便),提前判定,用while代替for

具体实例,请看书中的实例.

    10)Don't Repeat Yourself:老生常谈的问题了.解法有:同一类内的提取方法,子类间的抽取方法到父类,相互之间没关系类可以把共有方法移植到工具类.

    11)采用正则表达式进行内容或格式校验.替代那些if  else if .....

    12)使用Lambda表达式简化代码.

  4.架构

    1)通过使用OOA与OOD来设计系统.

    2)尽量满足SOLID设计原则.

    3)想要实现以上两点:去啃本GOF的设计模式吧.

    

  书中内容有很多,我只是选取了其中的一部分,作为我的读书笔记, 不算是"书透"吧,希望王老师不要责怪.

  以后争取每读完一本书,都写一篇读书笔记,对自己的帮助真的很大.也希望大家看了,能够有所收获.

读书笔记--<<会说话的代码>>的更多相关文章

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. SqlBulkCopy使用介绍以及注意事项

    SqlBulkCopy,微软提供的快速插入类,针对大批量数据操作,此类效果明显有所提升,以下是微软官方解释: Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具 ...

  2. IE 中创建 子窗口 传值 与接收值 【window.showModalDialog】

    父窗口 创建一个窗口 var backinfo = window.showModalDialog('UserSelect.aspx', '', 'dialogHeight=600px; dialogW ...

  3. Respond.js让IE6-8支持CSS3 Media Query

    原文地址:http://caibaojian.com/respondjs.html   使用方式   官方demo地址:http://scottjehl.github.com/Respond/test ...

  4. Sql server中根据object的定义查找object

    SELECT OBJECT_NAME(object_id) FROM sys.sql_modulesWHERE definition LIKE '%keyword to search%' 或者 SEL ...

  5. java菜鸟篇<二> eclipse启动tomcat报错的问题:Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "main"

    9.1今天不知道自己瞎搞eclipse的时候按到了什么键,然后再启动程序的时候就会报错: 如下: Exception: java.lang.OutOfMemoryError thrown from t ...

  6. VS2010 配置 DirectX 开发环境

    1.首先下载 DXSDK 并安装 http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/D ...

  7. volatile 和const 变量的使用

    一.volatile定义: 一个定义为volatile的变量是说这变量可能会被意想不到的被改变,这样,有了volatile变量后,就提醒编译器就不会去假设这个变量的值了.精确地说就是,编译中的优化器在 ...

  8. css 兼容小三角

    <!DOCTYPE><html ><head><meta http-equiv="Content-Type" content=" ...

  9. PHP实现简单爬虫

    <?php /**  * 爬虫程序 -- 原型  *  * 从给定的url获取html内容  *  * @param string $url  * @return string  */ func ...

  10. Zend Framework 框架搭建

    通过手工方法搭建Zend Framework的MVC框架结构.首先看一下zend framework mvc的目录结构 1. 在根目录下面创建 public ,并在 public 下创建 index. ...