java - 对具有不同返回值和类型的函数使用 DRY 原则
问题描述
说我有两种方法
public int findPages() {
return this.selectors
.getPagesSelector()
.map(selector -> {
Elements htmlElement = this.htmlPage.select(selector);
return NumberUtils.toInt(htmlElement.text(), 1);
})
.orElse(1);
}
private String findPercent(Element product, double oldPrice, double newPrice) {
return this.selectors
.getPercentSelector()
.map(selector -> {
Elements htmlElement = product.select(selector);
return StringUtils.defaultIfEmpty(htmlElement.text(), calculatePercent(oldPrice, newPrice));
})
.orElse(calculatePercent(oldPrice, newPrice));
两者做不同的事情并返回不同的类型,但共享代码结构。为了更简洁的代码,我应该将方法重构为更抽象的方法,还是这不违反 DRY 原则?谢谢!
解决方案
DRY(不要重复自己)原则,顾名思义,就是不要对同一事物进行多个实现。你有两种方法,findPages
和findPercent
。总的来说,这两种方法做的事情非常不同,因此它们不会相互重复。所以我们寻找部分匹配,但是,如果我们查看代码,我们会发现一些差异,所以它也不是真正的部分匹配。一个是调用pagesSelector
,另一个是调用percentSelector
. 您可以进行一些重构,例如获取选择器名称并返回正确选择器的方法,但这将是一项庞大而复杂的工作,除非您有充分的理由并且进行如此庞大的工作,否则不值得这样做和小增益,有两个看起来相似的代码不是一个正当的理由。如果您必须编写这种代码可能 100 次,那么重构您的代码或编写代码生成器并用它生成您的方法是有意义的。
推荐阅读
- java - 如何在 java 中使用 HikariCp 时指定数据库特定属性
- python - 覆盖整个区域的最佳方式,通过邮政编码进行搜索
- python - 执行大列表的元素复合操作
- excel - 匹配一个值并将数据粘贴到下一个可用单元格中
- makefile - Makefile 基于环境变量的条件赋值
- wampserver - Wamp64 服务器的问题
- java - 更新 sqlite db 并获取 nullpointerexception
- python - 如何在其他类中使用 super() 调用同一类两次?
- javascript - ReactJs 中的嵌套 URL 路由
- ios - 如何撤消`-FIRAnalyticsDebugEnabled`?