'
在我們團隊最近的一次討論中,我撰寫了以下代碼,該代碼后來被標記為具有回圈依賴關系,盡管據我所知和經驗并非如此。我需要一些新鮮的眼睛來看看它,以便我可以了解更多。
免責宣告:生產代碼已轉換為相應的虛擬代碼,以避免著作權問題。主要方法(當然)在產品代碼中不存在。
Beany.java
public class Beany {
private String x;
public static void main(String[] args) {
// main exists for testing purposes here. Depicts the functionality of validation function.
List<BeanyValidator> validatorList = List.of(isConfigDataNull(),
isValueOfXEmpty());
Beany beany = new Beany();
beany.setX("");
System.out.println(collectErrorsFrom(beany, validatorList));
}
public void setX(String x) { // setters in our code does not exist. This is merely for demo purposes here.
this.x = x;
}
public String getX() {
return x;
}
}
BeanyValidator.java :
public interface BeanyValidator extends Function<Beany, String> {
static BeanyValidator isConfigDataNull() {
return beany -> Objects.isNull(beany)
? "Object is null!"
: "NO_ERROR";
}
static BeanyValidator isValueOfXEmpty() {
return beany -> beany.getX().isEmpty()
? "Value is empty!"
: "NO_ERROR";
}
static List<String> collectErrorsFrom(Beany beany, List<BeanyValidator> validators) {
return validators.stream()
.map(validator -> validator.apply(beany))
.filter(err -> !"NO_ERROR".equals(err))
.collect(Collectors.toList());
}
}
What was pointed out as circular dependency was the fact Beany was being used as Function<T,U> -- making beany dependency of BeanyValidator -- and using validators inside the main method (which in prod is some sort of validation function) makes the validator a dependency of Beany and thereby causing circular dependency. I do not agree with my respectful peer but I always come into a discussion thinking I could be wrong.
By the way, I applied combinator pattern using Java8 Functions. Could someone please some shed some light on this?
Thanks in advance!
Kind regards.
uj5u.com熱心網友回復:
是的,有一個回圈依賴:
- 班級
Beany有一個List<BeanyValidator> - 介面
BeanyValidator擴展Function<Beany, String>
這可以通過將類放在不同的包中,然后查看代碼編譯所需的匯入陳述句來驗證。您會發現一個類匯入另一個類,反之亦然。
打破回圈依賴的一個建議是將main()方法從Beany類重構為單獨的類,例如
public class Main {
public static void main(String[] args) {
List<BeanyValidator> validatorList = List.of(isConfigDataNull(),
isValueOfXEmpty());
Beany beany = new Beany();
beany.setX("");
System.out.println(collectErrorsFrom(beany, validatorList));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313136.html
標籤:java
上一篇:SpringWebClient-記錄is2xxSuccessfulHTTPStatus
下一篇:小程式獲取視頻縮略圖
