关于接口设计策略的问题,清晰与臃肿的矛盾
这是在上个项目中发现的问题,不过事后就忘了。幸好现在想起来了,贴出来请大家讨论一下。
比如说有一个类,它有一个属性用来记载一个字符串中的插入点:
class LineProperty{
private int insertOffset;
....
public void setOffset(int newOffset){
insertOffset = newOffset;
}
public boolean needInsert(){
return (insertOffset >= 0);
}
....
}
在这里的内部实现是,insertOffset小于0,则表示不需要插入。没有使用专门的boolean型属性来标志。
问题就出现了,setOffset方法实际上承担了两个职责:
1、禁止插入
2、允许插入,并指定插入位置。
所以我想把它改成这样:
class LineProperty{
private int insertOffset;
....
public void setOffset(int newOffset){
assert(newOffset >= 0); //make sure offset is valid
insertOffset = newOffset;
}
public void clearOffset(){
insertOffset = -1;
}
public boolean needInsert(){
return (insertOffset >= 0);
}
....
}
但是这样一来,就多了一个public方法,也就是这个类的方法列表被扩大了。列表太长,就会影响这个类的易用性。而且第一种方法虽然含糊,但是也是比较常见的。
不过总的来说,我是比较倾向于第二种方法的。:P
不知道大家的意见如何?