我有以下方法的圈复杂度:减少的Java方法
private void setClientAdditionalInfo(Map map, Client client, User user) {
Map additionalInfo = (Map) map.get("additionalInfo");
if (checkMapProperty(additionalInfo, "gender")) {
client.setGender(additionalInfo.get("gender").toString());
}
if (checkMapProperty(additionalInfo, "race")) {
client.setRace(additionalInfo.get("race").toString());
}
if (checkMapProperty(additionalInfo, "ethnicity")) {
client.setEthnicity(additionalInfo.get("ethnicity").toString());
}
.....
12更多,如果以类似的方式使用的语句。唯一的区别是不同的setter方法名称和不同的参数。 现在,随着同样的模式一再重复,是否有一种方法可以降低代码复杂度?
您可以创建一个映射'{“race”:Client :: setRace,...}'或使用反射为字符串列表查找适当的设置器。不确定这是否会降低复杂性,但可能会减少重复。我想我会保持这种方式。更好地思考“为什么这会重复15次?”比想“这个代码在干什么?” –
一个值得提问的问题:为什么您的信息在地图上?你能否在早些时候将你的信息存储在'Client'中?通常答案是“否”,你必须咬下子弹,但有时你可以避免必须从地图上填充对象。 – biziclop
你的意思是“圈复杂性”还是“更少的代码行数?”对于N个东西的for循环可以将2^N添加到圈复杂度中,即使它看起来更好。对于如何改进不会改变圈复杂度的代码,你会得到很多答案。 – djechlin