Java 重构重复和高度耦合的代码

Java 重构重复和高度耦合的代码,java,design-patterns,refactoring,Java,Design Patterns,Refactoring,我有三门具体的课- 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

我有三门具体的课-

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
    }
}
公共类ClassA{
公共C1流程A(C1){
//大量复制的丑陋代码
//从一个领域到另一个领域
//返回c1
}
公共列表进程A(列表c1s){
//在c1上迭代
//呼叫过程(c1)
//将返回值添加到列表中
//返回列表
}
}
公共B类{
公共指挥与控制流程B(指挥与控制,指挥与控制,指挥与控制){
//大量复制的丑陋代码
//从一个领域到另一个领域
//返回c2
}

public List processB(List除了代码重复之外,我还看到了代码中的两个其他问题,您可以通过解决这些问题来消除代码重复的味道:

  • 几个类的紧密耦合。虽然我不能在不了解这些类的域和它们的实际描述性名称的情况下肯定这一点,但鉴于C1-C5的关联性足以使属性复制成为有效的操作,我认为重新考虑这些类的设计是一个好的开始。例如,它们是否可以C1-C5共享的RTE总是可以与新的bean类一起存储
  • 做同一件事的多种方法,或者,在传统的OOD术语中,它缺乏“关注点分离”。这些类不仅涉及转换(C3到C2等)考虑收集一个更一般的集合解决方案,例如,因为类A和B试图为用户做多个事情,所以对于单个项和集合,您有多种方法。(值得注意的是,在scala或groovy这样的函数式语言中,通用集合解决方案将更加优雅和简洁,从而减少对这些方便方法的需求。)

  • 从重命名方法、变量和类型名称开始重构。更改变量和方法名称。这将是我的第一步。创建接口并重写
    process()
    你的第二个构造器不应该像你的评论所说的那样返回一些
    集合
    返回列表
    无处不在。确实如此。谢谢!我已经更正了。