gpt4 book ai didi

java - 如何降低圈复杂度?

转载 作者:IT老高 更新时间:2023-10-28 20:51:20 24 4
gpt4 key购买 nike

我正在研究一个将 RequestDTO 发送到 Web 服务的类。我需要在发送之前验证请求。

请求可以从 3 个不同的地方发送,每个“请求类型”都有不同的验证规则,例如request1 必须有姓名和电话号码,request2 必须有地址等)

我有一个 DTO,其中包含一长串字段(姓名、地址、城市、电话号码等),无论它是哪种类型的请求,它都是相同的 DTO。

我创建了 3 种不同的验证方法,并根据类型调用适当的方法。

在每种方法中,我都有一长串 if-else 来检查每种请求类型所需的字段。

private void validateRequest1(Request request) {
StringBuilder sb = new StringBuilder();
if (null == request) {
throw new IllegalArgumentException("Request is null");
}
if (isFieldEmpty(request.getName())) { *see below
sb.append("name,"));
}
if (isFieldEmpty(request.getStreet())) {
sb.append("street,"));
}
...

isFieldEmpty() 检查字符串是否为 null 和 isEmpty() 并返回一个 boolean 值

这在其中一种方法中给了我 28 的圈复杂度,所以我的问题是.. 是否有可能降低这种复杂度? - 如果是这样,我该怎么做?

最终我需要检查很多字段,如果没有大量检查,我看不到如何做到这一点:/

最佳答案

一种简单的方法是将检查提升为单独的方法:

private String getAppendString(String value, String appendString) {
if (value == null || value.isEmpty()) {
return "";
}
return appendString;
}

然后你可以用这个方法代替 if block :

sb.append(getAppendString(request.getStreet(), "street,");

这会将复杂度从 28 降低到 3。永远记住:高复杂度计数表明方法试图做太多事情。可以通过将问题分成更小的部分来处理复杂性,就像我们在这里所做的那样。

关于java - 如何降低圈复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com