- 浏览: 2477160 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
这本书非常薄, 里面的作者却不少, 来自thoughtworks的各个层面, 其中心就是围绕敏捷这个东西在说事儿, 没有必要从头看到尾, 各取所需吧. 比如对我来说, 只有"对象健身操"这一章勉强是看完了的.
优秀设计背后的核心理念其实并不高深. 比如内聚性, 松耦合, 零重复, 封装, 可测试性, 可读性以及单一职责. 这七条差不多是放之四海而皆准的准则了.
理解了封装就是隐藏"数据, 实现细节, 类型, 设计或者构造", 这只是设计出良好封装的代码的第一步而已.
最"极端", 最"变态"的准则:
- 方法只使用一级缩进
- 拒绝使用else关键字
- 封装所有的原生类型和字符串
- 一行代码只有一个"."运算符
- 不要使用缩写
- 保持实体对象简单清晰
- 任何类中的实体变量都不要超过两个.
- 使用一流的集合
- 不使用任何的getter/setter/property
庞大的方法通常缺少内聚性, 一个常见的原则就是将方法的行数控制在5行之类.
对于简单的条件判断, 我们可以使用卫语句和提前返回替换它.
如果代码的每一行都有多个".", 那么这个行为就可能是发生错误的位置了, 也许你的对象需要同时与另外两个对象打交道. 而且这些过量的"."说明你破坏了封装性. 尝试让对象为你做一些事情, 而不要窥视对象内部的细节. 封装的主要含义就是, 不要让类的边界跨入到它不应该知道的类型中.
比如一个采用多点的类:
public class Board { class Price { String representation; } class Location { Price current; } String boardRepresentation() { StringBuffer sb = new StringBuffer(); for (Location l : sequares()) { sb.append(l.current.representation.substring(0, 1)); } return sb.toString(); } private Location[] sequares() { return null; } }
重构之后:
public class RefactorBoard { class Price { String representation; String character() { return representation.substring(0, 1); } void addTo(StringBuffer sb) { sb.append(character()); } } class Location { Price current; void addTo(StringBuffer sb) { current.addTo(sb); } } String boardRepresentation() { StringBuffer sb = new StringBuffer(); for (Location l : sequares()) { l.addTo(sb); } return sb.toString(); } private Location[] sequares() { return null; } }
我们总会不知觉的在类名, 方法名或者变量名中使用缩写. 请抵制这个诱惑. 缩写会令人困惑, 也容易隐藏一些更严重的问题.
想想你为什么要使用缩写, 因为你厌倦了一遍又一遍的敲打单词, 如果是这种情况, 也许你的方法调用过于频繁, 你是不是应该停下来消除一下重复了? 因为方法的名字太长? 这可能意味着有些职责没有放在正确的位置或者有缺失的类.
尽量保持类名和方法名中只包含一到两个单词, 避免在名字中重复上下文信息. 比如某个类是Order, 那么方法名就不必叫做shipOrder()了, 把它简化成ship().
每个类的长度都不能超过50行, 每个包中包含的文件不超过10个.
代码超过50行的类所做的事情通常都不止一件, 这回导致他们难以被理解和重用. 小于50行的代码的类还有一个妙处: 它可以在一屏显示, 不需要滚屏, 这样程序员可以很容易, 很快速地熟悉这个类.
创建这样的小类会有什么挑战呢? 通常会有很多成组的行为, 它们逻辑上是应该在一起的, 这时就需要使用包机制来平衡, 随着类变得越来越小, 职责越来越少, 加之包的大小也受到限制, 你就会逐渐注意到, 包中的类越来越集中, 他们就能够协作完成一个相同的目标. 包和类一样, 也应该是类聚的, 有一个明确的意图. 保证这些包足够小, 就能使它们有一个真正的标识.
大多数的类应该只负责处理单一的状态变量, 有时候也可以拥有两个状态变量, 每当为类添加一个实例变量, 就会立即降低类的内聚性. 一般而言, 编程如果遵守这些规则, 你就会发现只有两种类, 一种只负责维护一个实例变量的状态; 另一种类只负责协调两个独立的变量. 不要让这两种职责同时出现在一个类中.
将一个对象从拥有大量属性的状态, 结构成分层次的, 相互依赖的多个对象, 会直接产生一个更实用的对象模型.
评论
2 楼
macrochen
2010-07-19
dinckham 写道
有些规则现实中比较难实现吧
是的, 你就当"疯狂英语"来看就好了
1 楼
dinckham
2010-07-19
有些规则现实中比较难实现吧
发表评论
-
<异类>读书笔记
2013-03-06 07:54 0成功者能够获得更多的机会,从而能变得更为成功。税收愈减免,富人 ... -
《python学习手册》学习笔记
2013-03-11 22:25 3478python格式化传参数非常赞,用数字标明位置,值得java学 ... -
<万历十五年>读书笔记
2013-03-11 22:27 1635在网上下了一个电子书, 但是貌似跟万历十五年没啥关系, 都是讨 ... -
《鸟哥的linux私房菜》读书笔记(部分)
2013-03-11 22:27 2074x86是一种微机系统硬件架构,另一种是苹果的mac的架构 l ... -
《你的灯亮了吗》读书笔记
2013-03-06 07:20 1543这是一本原本写给程序员的书 本书的四个问题: 搞清问题的来源 ... -
《小狗钱钱》读书笔记
2013-03-06 07:17 1486一本非常不错的理财学习入门书, 以童话的形式, 儿童的思维方式 ... -
《我的奋斗》读书笔记
2012-04-14 22:03 2085文字写的很幽默, 故事也基本都是一些平常人的故事,看到了一个特 ... -
《Java Performance》书评
2012-01-15 18:32 2969原文: http://java.dzone.com/rev ... -
《程序员应该知道的97件事》读书笔记
2012-01-15 18:36 2394一本关于写代码的文 ... -
《影响力》读书笔记
2011-11-05 14:47 1841从书名上很可能以为 ... -
《浪潮之巅》读书笔记
2011-11-05 14:44 1379作为一个中国人通过分析硅谷高科技公司的一系列传奇, 总结出这 ... -
《黑客与画家》读书笔记
2011-11-05 13:37 1824以前看过《rework》, 觉得是每一个小型创业公司的创业宝 ... -
《乔布斯传》读书笔记
2011-10-18 08:53 2857在ipad上看完了这本书, 写的还不错, 里面没有无聊的八 ... -
《细说Java》读书笔记
2011-10-05 15:01 2004国人写的, 感觉是一 ... -
《敏捷估计与规划》读书笔记
2011-10-05 12:08 3185这本书断断续续看了很长时间, 内容非常不错, 基本涵盖了sc ... -
《怪诞心理学》读书笔记
2011-10-05 09:44 1831既然是怪诞, 那么整本书涉及的内容并不是我们平常司空见怪的一 ... -
《番茄工作法图解》读书笔记
2011-09-28 09:02 2397番茄工作法是时间管 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2107"工欲善其事必先利其器", 在平时的开发 ... -
《敏捷迭代开发管理者指南》读书笔记
2011-09-24 13:09 2225这是一本关于迭代开发 ... -
《解析极限编程》读书笔记
2011-09-24 13:03 1796不知道是kent beck的语 ...
相关推荐
《软件管理沉思录》作为软件工程领域内的一部权威之作,为广大软件工程管理者和开发人员提供了一套全面的管理和实践框架。这本书不仅仅适用于经验丰富的专家,同样也适合新入行的工程师,因为它深入浅出地介绍了软件...
阅读此书后,读者将能够更好地提升项目执行的效率,构建和领导高效的开发团队,并且推动软件产品的质量持续改进。无论是对于刚踏入软件管理领域的新人,还是对于寻求更高层次管理提升的资深人士,这本著作都将是一本...
本文基于“高手笔记 软件开发软件使用笔记”这一资源,详细介绍了如何构建带有内存错误检测功能的 GCC 编译器,以及如何使用 QEMU 虚拟机,这些知识点对于提高软件开发的质量与效率具有重要价值。 首先,我们来看看...
Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件开发魔典资源库 学习笔记 Java软件...
《Android应用开发揭秘》读书笔记不仅是一份个人学习历程的记录,更是一部深入浅出的Android开发指南。本书籍及笔记覆盖了从基础知识到高级应用的广泛内容,为初学者和有经验的开发者提供了宝贵的资源。 ### ...
这份"软件开发学习笔记"涵盖了多个编程语言和技术领域,如C#、Delphi、VB.NET以及DLL库的开发,还包含了ICCO Development Help的相关资料,旨在帮助学习者深入理解软件开发的核心概念和实践技巧。 首先,C#是一种...
标题中的“读书笔记软件 编程笔记 学习笔记”暗示了这个软件是专为记录、整理和检索读书、编程及各类学习过程中的知识而设计的。它可能包含以下核心功能: 1. **多类型笔记**:软件允许用户创建不同类型的笔记,...
国民技术N32G435xx系列单片机开发包资料数据手册,硬件参考设计,软件开发套件,应用笔记等技术资料: 1-产品简介(Product Brief) 2-数据手册(Datasheet) 3-用户手册(UserManual) 4-勘误手册(Errata sheet) 5-硬件...
【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...
NoteRecorder,这款优秀的笔记记录软件,以其高效、便捷的功能在众多同类软件中脱颖而出。近期的更新1更是为用户带来了诸多实用的新特性,旨在进一步提升用户体验,帮助用户更好地管理和组织他们的思维与信息。 ...
在读书笔记中,作者分享了他对软件测试的理解和感悟。 首先,软件测试在作者的大学生涯中并未得到足够的重视,直到在实际工作中承担起测试职责,他才真正认识到测试的重要性。测试不仅关乎代码的功能正确性,更是...
综上所述,这款名为“MiniDiary”的软件很可能是一个集成了读书笔记功能的小型应用程序,用户可以通过它来记录和整理阅读过程中的思考和收获。通过安装程序进行安装,参考说明文件了解操作,同时还能发现更多类似...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
笔记记录分享-笔记记录分享网站-笔记记录分享网站源码-笔记记录分享网站java代码-笔记记录分享网站设计与实现-基于springboot的笔记记录分享网站-基于Web的笔记记录分享网站设计与实现-笔记记录分享项目-笔记记录...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
国民技术N32L43xx系列单片机开发包资料数据手册,硬件参考设计,软件开发套件,应用笔记等技术资料: 1-产品简介(Product Brief) 2-数据手册(Datasheet) 3-用户手册(UserManual) 4-勘误手册(Errata sheet) 5-硬件...