最近看了一部分《软件开发沉思录》, 感觉里面的“对象健康操”还是蛮有意思的,在这记录下,希望以后自己写的代码能按照这个要求来写。
规则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();
- }
- }
重构后
分享到:
相关推荐
ThoughtWorks文集和Tech For Fun等平台收录了这些原则,称为“对象健身操”。其核心在于通过限制特定的编码实践来引导开发者思考如何更好地进行面向对象的设计。接下来,我们将详细探讨这些原则。 1. 内聚性:代码...
本书对当前软件开发中存在的问题进行了广泛的探讨。包括公司创始人 roy singham在内的许多 thoughtworks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容...
本书对当前软件开发中存在的问题进行了广泛的探讨。包括公司创始人 Roy Singham在内的许多 ThoughtWorks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容...
《软件沉思启示录》是ThoughtWorks公司员工智慧的结晶,它揭示了软件开发领域中的深邃思考与实践经验。这份资料不仅涵盖了软件工程的核心理念,还包含个人简历和面试准备的相关内容,对于软件开发者和求职者来说,都...
《SQL沉思录》是一本专注于SQL(Structured Query Language,结构化查询语言)的图书,旨在帮助数据库管理员(DBA)深化对SQL语言的理解和运用。该书针对刚接触MySQL数据库的同事也具有较高的参考价值,可作为基础...
《软件管理沉思录》作为软件工程领域内的一部权威之作,为广大软件工程管理者和开发人员提供了一套全面的管理和实践框架。这本书不仅仅适用于经验丰富的专家,同样也适合新入行的工程师,因为它深入浅出地介绍了软件...
本书为软件工程领域权威人士之作,书中首先深入讲解了计划类型和计划过程,接着分析了项目团队建设和激励,然后描写了如何与经理共事,如何说服他们采用最佳实践,最后探讨了个人职责、承诺和过程。本书适合软件项目...
【标题】:“PHP沉思录之三.pdf”可能是一本探讨PHP编程深入理解与实践的书籍或文档,属于IT技术领域,特别是Web开发方向。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在服务器端编程中占有...
在阅读《软件管理沉思录》之后,我深感书籍对于提升软件项目管理水平具有极大的帮助,尤其是对于当前软件行业中的质量控制和团队建设的实际问题提供了深刻的见解和实用的指导方法。本书通过详尽的分析,不仅阐述了...
### 软件管理沉思录——核心知识点详解 #### 第一部分:管理你的项目 - **软件产品质量的重要性:** - 在《软件管理沉思录》的第一部分中,作者强调了软件产品质量对于整个项目的成功至关重要。随着软件在各行...
《软件管理沉思录》这本书,便是一盏明灯,为那些在软件项目管理大海中探索前行的人们指引方向。 本书深入探讨了计划类型和计划过程,让读者了解到计划不仅仅是一个简单的时间表,它更是一种管理工具,一种确保软件...
设计模式沉思录---高清版.pdf
### 数学沉思录——古今数学思想的发展与演变 #### 重要知识点概览 本作品由Mario Livio撰写,深入探讨了数学的本质及其历史发展,从古希腊时期至今的数学家的思想与贡献,以及数学与哲学、逻辑学的关系。下面将...
《交互设计沉思录》是交互设计领域的经典之作,由顶尖设计专家Jon Kolko倾力撰写,旨在深入探讨如何通过创新思维来提升产品的交互体验。这本书的第二版更是结合了最新的实践经验和行业动态,为读者提供了丰富的洞见...
设计模式 设计模式沉思录
设 计 模 式 沉 思 录