最近看了一部分《软件开发沉思录》, 感觉里面的“对象健康操”还是蛮有意思的,在这记录下,希望以后自己写的代码能按照这个要求来写。
规则1: 方法只使用一级缩进
每个方法只关注一件事情,提高可重用性
原来的代码如下:
- class Board {
- ...
- String board() {
- StringBuffer buf = new StringBuffer();
- for(int i = 0; i < 10; i++){
- for(int j = 0; j < 10; j++)
- buf.append(data[i][j]);
- buf.append("\n");
- }
- return buf.toString();
- }
- }
重构后的代码如下:
- class Board {
- ...
- String board(){
- StringBuffer buf = new StringBuffer();
- collectRows(buf);
- Return buf.toString();
- }
-
- Void collectRows(StringBuffer buf){
- for(int i = 0; i < 10; i++)
- collectRow(buf, i);
- }
-
- Void collectRow(StringBuffer buf, int row){
- for(int i = 0; i < 10; i++)
- buf.append(data[row][i]);
- buf.append("\n");
- }
- }
规则2: 拒绝使用else关键字
层层嵌套的条件判断往往令人眩晕,另外条件判断结构通常还是重复代码的来源; 可以通过return提前,三元运算符,多态等方式来避免使用else
原来代码:
- public static void endMe(){
- if(status == DONE){
- doSomething();
- }else{
- doSomethingElse();
- }
- }
重构后代码:
- public static void endMe(){
- if(status == DONE){
- doSomething();
- return;
- }
- doSomethingElse();
- }
原来代码:
- public static Node head(){
- if(isAdvancing()){
- return first;
- }else{
- return last;
- }
- }
重构后代码:
- public static Node head(){
- return isAdvancing() ? first : last;
- }
另外,如果根据状态进行分支选择的代码大量地重复,那么就应该考虑使用策略模式或者反射的方式去解决。
规则3: 封装所有的原生类型和字符串
方法名中应该描述清楚参数的意思
规则4:一行代码只有一个“.”运算符
一行中如果有多个".", 而且这些“.”都是彼此联系的,那么你的对象就已经深深地陷入到另一个对象之中了。这些过量的“.”说明你破坏了封装性。尝试着让对象为你做一些事情,而不要窥视对象内部的细节。封装的主要含义就是,不要让类的边界跨入到它不应该知道的类型中。
原来代码:
- class Board{
- ...
- class Piece{
- ...
- String representation;
- }
-
- class Location{
- ...
- Piece current;
- }
-
- String boardRepresentation(){
- StringBuffer buf = new StringBuffer();
- for(Location l : squares())
- buf.append(l.current.representation.substring(0, 1));
- return buf.toString();
- }
- }
重构后
分享到:
相关推荐
本书对当前软件开发中存在的问题进行了广泛的探讨。包括公司创始人 Roy Singham在内的许多 ThoughtWorks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容...
软件管理沉思录
面向对象九诫,摘自ThoughtWorks文集、博文!对象健身操,写好代码,值得收藏,随时告诫自己!
本书对当前软件开发中存在的问题进行了广泛的探讨。包括公司创始人 roy singham在内的许多 thoughtworks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容...
本书对当前软件开发中存在的问题进行了广泛的探讨。包括公司创始人 Roy Singham在内的许多 ThoughtWorks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容...
SQL沉思录,dba必看,刚接触mysql的同事可以先备存着。
本书为软件工程领域权威人士之作,书中首先深入讲解了计划类型和计划过程,接着分析了项目团队建设和激励,然后描写了如何与经理共事,如何说服他们采用最佳实践,最后探讨了个人职责、承诺和过程。本书适合软件项目...
软件沉思启示录 thoughtwork公司员工的精华 还有我的简历和面试资料
3.软件管理沉思录读后感 3.软件管理沉思录读后感 1. 确立质量控制的策略、目标和计划 2. 正确训练、指导和支持开发人员及其团队 3. 确立和维护软件需求的
《软件管理沉思录》是软件工程领域的经典必读书籍之一!推荐给所有IT、软件相关行业的入门学生和从业者!
PHP沉思录之三.pdf
PHP沉思录之二.pdf
PHP沉思录之四 Zend Framework.pdf
设计模式沉思录---高清版.pdf
交互设计沉思录
设计模式 设计模式沉思录
Session有效期问题——PHP沉思录之五.pdf