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

1.类的组织

包括变量方法

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

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

2.类应该短小

类的第一原则就是短小

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

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

2.1 单一权责原则

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

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

2.2 内聚

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

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

一个例子

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. 为了修改而组织(开闭原则)

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

接下来我们看一个例子

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语句相关,导致维护成本、测试成本、阅读成本大大增高

重新组织后

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的功能即可

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...