微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

原文地址:https://cloud.tencent.com/developer/article/2166214

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐