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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特特专属

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值