前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码整洁之道-读书笔记之类

代码整洁之道-读书笔记之类

原创
作者头像
特特
发布2022-11-17 11:16:07
2230
发布2022-11-17 11:16:07
举报
文章被收录于专栏:特特的专栏特特的专栏

1.类的组织

包括变量方法

变量公共静态常量、私有静态常量、私有实体变量、公共实体变量

方法:公共方法、私有方法,一般私有方法在调用该方法的方法后面

2.类应该短小

类的第一原则就是短小

命名是判断类的长度的第一手段

如果某个类无法命名精确,那说明这个类就太长了

2.1 单一权责原则

类或者模块应有其仅有一条加以修改的理由。

系统应该有许多短小的类而不是少量巨大的类组成,每个小类封装一个权责,只有一个修改的原因,并与少数其他类一起协同达成期望的系统行为

2.2 内聚

类应该只有少量的实体变量。类中的每个方法都应该操作一个或多个这种变量。

一般来说,创建极大化内聚类是既不可取也不可能,我们希望内聚性保持较高位置,内聚性高,意味着类中的方法和变量互相依赖,互相结合成一个逻辑整体

看一个例子

代码语言:java
复制
public class Stack{
	private int topofStack=0;
	List<Integer> elements=new LinkedList<Integer>(); 
	public int size(){
		return topofStack; 
	}

	public void push(int element){ 
		topofStack++;
		elements.add(element); 
	}

	public int pop() throws PoppedWhenEmpty{
		 if (topofStack == 0) {
			throw new PoppedWhenEmpty();
		}
		int element=elements.get(--topofStack); 
		elements.remove(topofStack);
		return element; 
	}
}

2.3保持内聚性就会得到许多短小的类

将大函数拆分成小函数,就会出现更多的类,而且在拆分函数的过程中,我们又会提前局部变量为实体变量以便于减少函数的入参,慢慢的类的内聚性就会下降,这个时候我们又需要将类拆分成内聚性更高的类,最终我们拆分成很多的短小内聚的类

3. 为了修改而组织(开闭原则)

基本上任何系统,都不可避免进行修改,每一次修改我们都是冒着系统其他部分不能如期工作的风险。但是在整洁的系统中,我们对类加以组织,最大程度降低了修改的风险

接下来我们看一个例子

代码语言:java
复制
public class Sql{
	public Sql(String table,Column[] columns) 
	public String create()
	public String insert(Object[] fields) 
	public String selectAll()
	public String findByKey(String keyColumn,String keyValue)
	public String select(Column column,String pattern)
	public String select(Criteria criteria) 
	public String preparedInsert()
	private String columnList(Column[] columns)
	private String valuesList(Object[] fields,final Column[] columns) 
	private String selectWithCriteria(String criteria)
	private String placeholderList(Column[] columns) 
}

当前的代码还不支持update的sql语句,如果我们需要支持update的语句,我们就必须修改sql,一旦进行了修改,我们就需要回归测试sql所有的功能,而且里面还有一些私有方法只和select语句相关,导致维护成本、测试成本、阅读成本大大增高

重新组织后

代码语言:java
复制
abstract public class Sql{
	public Sql(String table, Column[] columns)
	abstract public String generate();
}

public class CreateSql extends Sql{
	public CreateSql(String table, Column[] columns)
	@Override
	public String generate();
}

public class SelectSql extends Sql{
	public SelectSql(String table, Column[] columns)
	@Override
	public String generate();
}

public class InsertSql extends Sql{
	public InsertSql(String table, Column[] columns, Object[] fields)
	@Override
	public String generate();
	private String valueList(Object[] fields,final Column[] columns);
}

public class SelectWithCriteriaSql extends Sql{
	public SelectWithCriteriaSql(String table, Column[] columns, Criteria criteria)
	@Override
	public String generate();
}
...

经过重新组织后,每一个类中的代码都变的简单,大大降低了阅读成本和维护成本,满足了开闭原则,隔离了修改,支持了扩展,再想增加update语句,我们只需创建UpdateSql的类,实现update的功能即可

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.类的组织
  • 2.类应该短小
    • 2.1 单一权责原则
      • 2.2 内聚
        • 2.3保持内聚性就会得到许多短小的类
        • 3. 为了修改而组织(开闭原则)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档