`

良好的程序设计——避免属性信息冗余

阅读更多

设计数据结构的时候常常为了性能考虑,很容易引入一些冗余的属性,不是说多余的属性不好,我们应该按照一个正常的思维方法去设计数据结构。

看看一个记录路线的数据结构的例子,一条路线有起点,终点以及距离三个基本的信息,第一种设计方式如下,分别用三个属性值记录三个值

 

import java.awt.Point;

public class Line {

		 public Point start;
		 public Point end;
		 public double distance;

}

  我们可以看出距离是受另外起点和终点控制的,它们的变化会导致距离值的变化,所以第二种设计我们考虑使用一个方法来记录距离的信息如下

 

import java.awt.Point;

public class Line {

		 public Point start;
		 public Point end;
		 
		 public double distance(){
			 return start.distance(end);
		 }

}

 这种设计和数据库的范式原则原理上也是一样的(比如通过个人信息的出生年份即可推算出年龄信息,所以没必要多设计一个字段保存年龄信息)但是实际开发过程中,我们为了业务的方便或者是出于性能的考虑,我们可能会考虑设计缓存来记录计算结果,第三种设计方式如下

 

import java.awt.Point;

public class Line {

		 public Point start;
		 public Point end;
		 public boolean changed = true;
		 public double distance;
			 
		 public Point getStart() {
			 return start;
		 }
		 public void setStart(Point start) {
			 this.start = start;
			 changed = true;
		 }
		 public Point getEnd() {
		 	 return end;
		 }
		 public void setEnd(Point end) {
			 this.end = end;
			 changed = true;
		 }
		 
		  public double distance(){
			  if(changed){
				  distance = start.distance(end);
				  changed = false;
			  }
			  return distance;
		  }
}

  建议尽量使用get/set来获取和设置属性信息,如上面的例子,可以很方便地添加缓存控制。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics