在创建规范中重构多个 if

问题描述 投票:0回答:1

如何重构以下方法以降低复杂性?

protected Specification<Test> createSpecification(TestCriteria criteria) {
        Specification<Test> specification = Specification.where(null);
        if (criteria != null) {
            if (criteria.getId() != null) {
                specification = specification.and(buildRangeSpecification(criteria.getId(), test_.id));
            }
            if (criteria.getCustomerName() != null) {
                specification = specification.and(buildStringSpecification(criteria.getCustomerName(), Test_.customerName));
            }
            if (criteria.getAddress() != null) {
                specification = specification.and(buildStringSpecification(criteria.getAddress(), Test_.address));
            }
(...)

return specification;
}

声纳抱怨的问题是:重构此方法以将其认知复杂度从 17 降低到允许的 15。

谢谢!

java jhipster
1个回答
0
投票

考虑反转一些 if 条件并使用提前返回。

protected Specification<Test> createSpecification(TestCriteria criteria) {
        Specification<Test> specification = Specification.where(null);
        if (criteria == null) return specification;
     
       // split into methods
       addIdSpecification(criteria.getId(), specification);
       addStringSpecification(criteria.getCustomerName(), Test_.customerName, specification);
       addStringSpecification(criteria.getAddress(), Test_.address, specification);
       
       // Add other criteria as needed
(more)

return specification;
}


private void addIdSpecification(Long id, Specification<Test> specification) {
    if (id == null) return;
    specification = specification.and(buildRangeSpecification(id, test_.id));
   
}

...

但是认知复杂性取决于更多因素,例如包括深度等等......

© www.soinside.com 2019 - 2024. All rights reserved.