gpt4 book ai didi

java - 重构重复和高度耦合的代码

转载 作者:行者123 更新时间:2023-11-30 11:35:16 25 4
gpt4 key购买 nike

我有三个具体类-

public class ClassA{
public C1 processA(C1 c1){
//lots of ugly code that copies
//one field to another
//return c1
}
public List<C1> processA(List<C1> c1s){
//iterate over c1s
//call process(c1)
//add returned value to list

//return list
}
}


public class ClassB{
public C2 processB(C2 c2, C3 c3){
//lots of ugly code that copies
//one field to another
//return c2
}
public List<C2> processB(List<Pair<C2, C3> pairs){
//iterate over pairs
//call process(c2, c3)
//add returned value to list

//return list
}
}

public class ClassC{
public C4 processC(C4 c4, C5 c5, C1 c1){
//lots of ugly code that copies
//one field to another
//return c4
}
public List<C4> processC(List<Triple<C4, C5, C1> triples){
//iterate over triples
//call process(c4, c5, c1)
//add returned value to list

//return list
}
}

我想删除 process(List...) 方法中的重复项。我不关心 processA(C1)、processB(C2,C3)、processC(C4,C5,C1) 方法,它们将保持不变。在重构此代码时我有哪些选择?

最佳答案

除了代码重复之外,我还看到了代码的另外两个问题,您可以解决这些问题以消除重复的代码味道:

  1. 几个类的紧密耦合。虽然我不能在不了解这些类的域及其实际描述性名称的情况下肯定这一点,但看到 C1-C5 足够相关,属性复制是一个有效的操作,我认为一个好的开始是重新考虑这些类的设计。例如,它们可以是composed吗?以便 C1-C5 共享的属性始终可以存储在新的 bean 类中?
  2. 做同一件事的多种方式,或者用传统的 OOD 术语来说,它缺乏“关注点分离”。这些类不仅涉及转换(C3 到 C2 等),而且还收集对集合的操作结果。考虑将后一个问题分离出来,也许只是让客户使用更通用的收集解决方案,例如 apache collection's Collections.collect() .因为 A 类和 B 类试图为用户做多件事,所以您有多种方法用于单个项目和集合。 (有趣的是,在像 scala 或 groovy 这样的函数式语言中,通用的集合解决方案会更加优雅和简洁,从而减少对这些便捷方法的需求。)

关于java - 重构重复和高度耦合的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15205161/

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