一般而言,自然界是以对称为美的。但是,在编程的世界里面,不对称的情况比比皆是,一样的美。
常见的api中有如下例子:
// String的方法。
public String substring(int beginIndex, int endIndex)
// List的方法。
List<E> subList(int fromIndex, int toIndex)
这里一直遵循着不对称的左闭右开原则。
这种原则有2个显著的优点。
1 计算该范围所包含的数量时,直接endIndex-beginIndex就好了。如果是左闭右闭区间的话,则需要形如endIndex-beginIndex+1的方式来计算。
2 左闭右开区间有良好的叠加性。举个例子,一个[0,100)的范围,自然等于[ 0,10), [10,20),…,[90,100)的叠加。
了解了这种不对称的优点,那么我们设计接口的时候,应该尽量遵循左闭右开原则。
/**
* 查找在一定时间范围内加入系统的用户。包含start时间点,不包含end时间点。
* */
public List<User> findUser(Date start, Date end)
再看一个例子:
public static final String FILE_SEPARATOR = File.separator;
private String baseDir;
public String getFileDir(String userId, String date) {
String relativePath = getDateDir(date) + getUserDir(userId);
return getBaseDir() + FILE_SEPARATOR + relativePath;
}
private String getUserDir(String userId) {
return FILE_SEPARATOR + userId + FILE_SEPARATOR;
}
private String getDateDir(String date) {
return date + FILE_SEPARATOR + date;
}
private String getBaseDir() {
return baseDir;
}
这段代码的功能是构建一个用户在特定日期的文件路径目录。该文件路径目录由三部分组成,baseDir是配置的根目录,日期目录是根据日期所得到的目录,用户目录是根据用户id得到的目录。
在写这段代码的过程中,很明显没有考虑separator和目录的关系,导致各个子目录风格不统一,每次使用类的方法时都要仔细的检查该目录是不是以separator结尾,以防出错。
很明显,使用不对称的原则可以很好的解决该问题,可以规定所有子目录都以separator开头,但是不以separator结尾。
重构后代码如下:
public static final String FILE_SEPARATOR = File.separator;
private String baseDir;
public String getFileDir(String userId, String date) {
return getBaseDir() + getDateDir(date) + getUserDir(userId);
}
private String getUserDir(String userId) {
return FILE_SEPARATOR + userId;
}
private String getDateDir(String date) {
return FILE_SEPARATOR + date + FILE_SEPARATOR + date;
}
private String getBaseDir() {
return baseDir;
}
当然,这里getFileDir没有了separator结尾,需要修改使用到该方法的地方。
做了该重构以后,所有子目录的格式变为统一的,方便记忆和使用,并且极大的简化了目录拼接问题,由于separator不对称的使用,现在目录的拼接只需要简单的使用子目录拼接即可,不用关心separator的问题了。
分享到:
相关推荐
用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构_源码.rar.rar
reconfiguration_配电网_配电网络重构_reconfiguration_配电网重构_配电网重构_源码.zip
提取MFCC参数,再由MFCC重构幅值谱,利用幅值谱重构语音。
对经验模态分解后的各分量IMF进行重构代码,函数可直接调用。
重构__改善既有代码的设计_高清 绝对清晰
mutual_information_相空间重构matlab_互信息熵_源码.zip
【程序老媛出品,必属精品,亲测校正,质量保证】 ...源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的开发人员
牛顿拉普逊法就算配电网重构的潮流程序,结构清晰易懂。
PMSM_无传感器FOC_的单分流三相电流重构算法_01299a_cn
mutual_information_相空间重构matlab_互信息熵.zip
压缩传感重构算法中的子空间追踪算法,用于信号的重构
配电网重构是一个多目标、多时段、多组合、多约束的非线性优化问题。该问题的复杂性,决定了难以用单纯的数学方法得到满意的解。尝试用改进的遗传算法进行配电网络重构,建立评价函数,寻求该评价函数最优解
可重构密码_博士论文_COBRA1
重构——改善既有代码设计,经典文档,架构师必须教程
医学图像三维重构平台,实现了三维重构用VC++实现
初中语文语文论文体验中转换拓展后重构__例谈鲸等常识性课文的教学
reconfiguration_配电网_配电网络重构_reconfiguration_配电网重构_配电网重构.zip
数据信号处理matlab,程序实现压缩感知重构过程,仅供参考。
31天重构速成_中文版,通过实例来讲解如何运用模式。