What1slove / RefactoringLab

Вторая лабораторная по рефакторингу
0 stars 0 forks source link

Одержимость элементарными типами + Дублирование кода (Ex) #12

Open What1slove opened 4 years ago

What1slove commented 4 years ago

Метод getCoords Неуместное использование массивов int когда данные имеют смысл Почти полное дублирование кусков кода в ветвях switch Почему плохо: 1 Очень тяжело читается и понимается 2 Можем забыть какая ячейка массива каким данным соответствует 3 При изменении бизнес-логики придётся всё менять и переписывать Код: `public List<int[]> getCoords(Level lev){ int[][] coords; Column c = lev.getColumns().get(col); int[] p1 = c.getFrontPoint1(); int[] p2 = c.getFrontPoint2();

    if (isPod && z < Board.LEVEL_DEPTH) {
        int cx = p1[0] + (p2[0]-p1[0])/2;
        int cy = p1[1] + (p2[1]-p1[1])/2;

        // define outer and inner diamonds
        int[][] outer = new int[4][3];
        int[][] inner = new int[4][3];
        outer[0][0] = cx;
        outer[0][1] = cy - PODSIZE;
        outer[0][2] = (int)z;
        outer[1][0] = cx + PODSIZE;
        outer[1][1] = cy;
        outer[1][2] = (int) z;
        outer[2][0] = cx;
        outer[2][1] = cy + PODSIZE;
        outer[2][2] = (int) z;
        outer[3][0] = cx - PODSIZE;
        outer[3][1] = cy;
        outer[3][2] = (int) z;
        inner[0][0] = cx;
        inner[0][1] = cy - PODSIZE/3;
        inner[0][2] = (int) z;
        inner[1][0] = cx + PODSIZE/3;
        inner[1][1] = cy;
        inner[1][2] = (int) z;
        inner[2][0] = cx;
        inner[2][1] = cy + PODSIZE/3;
        inner[2][2] = (int) z;
        inner[3][0] = cx - PODSIZE/3;
        inner[3][1] = cy;
        inner[3][2] = (int) z;

        // define line path through those diamonds:
        coords = new int[17][3];
        coords[0] = outer[0];
        coords[1] = outer[1];
        coords[2] = inner[1];
        coords[3] = inner [0];
        coords[4] = outer[1];
        coords[5] = outer[2];
        coords[6] = inner[2];
        coords[7] = inner[1];
        coords[8] = outer[2];
        coords[9] = outer[3];
        coords[10]= inner[3];
        coords[11]= inner[2];
        coords[12]= outer[3];
        coords[13]= outer[0];
        coords[14]= inner[0];
        coords[15]= inner[3];
        coords[16]= outer[0];
    }
    else { 
        coords = new int[7][3];
        switch (s) {
        case STRAIGHT:
            coords[0][0] = p1[0];
            coords[0][1] = p1[1];
            coords[0][2] = (int) (z-EXHEIGHT_H);
            coords[1][0] = p2[0];
            coords[1][1] = p2[1];
            coords[1][2] = (int) (z+EXHEIGHT_H);
            coords[2][0] = p2[0] - (p2[0]-p1[0])/3;
            coords[2][1] = p2[1] - (p2[1]-p1[1])/3;
            coords[2][2] = (int) z;
            coords[3][0] = p2[0];
            coords[3][1] = p2[1];
            coords[3][2] = (int) (z-EXHEIGHT_H);
            coords[4][0] = p1[0];
            coords[4][1] = p1[1];
            coords[4][2] = (int) (z+EXHEIGHT_H);
            coords[5][0] = p1[0] + (p2[0]-p1[0])/3;
            coords[5][1] = p1[1] + (p2[1]-p1[1])/3;
            coords[5][2] = (int) z;
            coords[6][0] = p1[0];
            coords[6][1] = p1[1];
            coords[6][2] = (int) (z-EXHEIGHT_H);
            break;

        case JUMPRIGHT1:
        case LANDRIGHT2:
            coords[0][0] = p1[0] + (p2[0]-p1[0])/4;
            coords[0][1] = p1[1] + (p2[1]-p1[1])/4;
            coords[0][2] = (int) (z+EXHEIGHT_H*2);
            coords[1][0] = p2[0] + (p2[0]-p1[0])/4;
            coords[1][1] = p2[1] + (p2[1]-p1[1])/4;
            coords[1][2] = (int) (z+EXHEIGHT_H*2);
            coords[2][0] = p2[0] - (p2[0]-p1[0])/11;
            coords[2][1] = p2[1] - (p2[1]-p1[1])/11;
            coords[2][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[3][0] = p2[0];
            coords[3][1] = p2[1];
            coords[3][2] = (int) z;
            coords[4][0] = (int) (p1[0] + (p2[0]-p1[0])/2);
            coords[4][1] = (int) (p1[1] + (p2[1]-p1[1])/2);
            coords[4][2] = (int) (z+ EXHEIGHT_H*5);
            coords[5][0] = (int) (p2[0] - (p2[0]-p1[0])/2.5);
            coords[5][1] = (int) (p2[1] - (p2[1]-p1[1])/2.5);
            coords[5][2] = (int) (z+EXHEIGHT_H *2.6);
            coords[6] = coords[0];
            break;

        case JUMPLEFT1:
        case LANDLEFT2:
            coords[0][0] = p1[0];
            coords[0][1] = p1[1];
            coords[0][2] = (int) z;
            coords[1][0] = (int) (p1[0] + (p2[0]-p1[0])/2);
            coords[1][1] = (int) (p1[1] + (p2[1]-p1[1])/2);
            coords[1][2] = (int) (z+ EXHEIGHT_H*5);
            coords[2][0] = (int) (p1[0] + (p2[0]-p1[0])/2.5);
            coords[2][1] = (int) (p1[1] + (p2[1]-p1[1])/2.5);
            coords[2][2] = (int) (z+EXHEIGHT_H *2.6);
            coords[3][0] = p2[0] - (p2[0]-p1[0])/4;
            coords[3][1] = p2[1] - (p2[1]-p1[1])/4;
            coords[3][2] = (int) (z+EXHEIGHT_H*2);
            coords[4][0] = p1[0] - (p2[0]-p1[0])/4;
            coords[4][1] = p1[1] - (p2[1]-p1[1])/4;
            coords[4][2] = (int) (z+EXHEIGHT_H*2);
            coords[5][0] = p1[0] + (p2[0]-p1[0])/11;
            coords[5][1] = p1[1] + (p2[1]-p1[1])/11;
            coords[5][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[6] = coords[0];
            break;

        case JUMPLEFT2:
        case LANDLEFT1:
            coords[0][0] = p1[0];
            coords[0][1] = p1[1];
            coords[0][2] = (int) z;
            coords[1][0] = (int) (p1[0] + (p2[0]-p1[0])/4.5);
            coords[1][1] = (int) (p1[1] + (p2[1]-p1[1])/4.5);
            coords[1][2] = (int) (z+ EXHEIGHT_H*8);
            coords[2][0] = (int) (p1[0] + (p2[0]-p1[0])/4.5);
            coords[2][1] = (int) (p1[1] + (p2[1]-p1[1])/4.5);
            coords[2][2] = (int) (z+EXHEIGHT_H *4);
            coords[3][0] = p2[0] - (p2[0]-p1[0])/2;
            coords[3][1] = p2[1] - (p2[1]-p1[1])/2;
            coords[3][2] = (int) (z+EXHEIGHT_H*4);
            coords[4][0] = (int) (p1[0] - (p2[0]-p1[0])/3.5);
            coords[4][1] = (int) (p1[1] - (p2[1]-p1[1])/3.5);
            coords[4][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[5][0] = p1[0];// - (p2[0]-p1[0])/15;
            coords[5][1] = p1[1];// - (p2[1]-p1[1])/15;
            coords[5][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[6] = coords[0];
            break;

        case JUMPRIGHT2:
        case LANDRIGHT1:
            coords[0][0] = p2[0] - (p2[0]-p1[0])/2;
            coords[0][1] = p2[1] - (p2[1]-p1[1])/2;
            coords[0][2] = (int) (z+EXHEIGHT_H*4);
            coords[1][0] = (int) (p2[0] + (p2[0]-p1[0])/3.5);
            coords[1][1] = (int) (p2[1] + (p2[1]-p1[1])/3.5);
            coords[1][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[2][0] = p2[0];// - (p2[0]-p1[0])/15;
            coords[2][1] = p2[1];// - (p2[1]-p1[1])/15;
            coords[2][2] = (int) (z+EXHEIGHT_H*1.8);
            coords[3][0] = p2[0];
            coords[3][1] = p2[1];
            coords[3][2] = (int) z;
            coords[4][0] = (int) (p2[0] - (p2[0]-p1[0])/4.5);
            coords[4][1] = (int) (p2[1] - (p2[1]-p1[1])/4.5);
            coords[4][2] = (int) (z+ EXHEIGHT_H*8);
            coords[5][0] = (int) (p2[0] - (p2[0]-p1[0])/4.5);
            coords[5][1] = (int) (p2[1] - (p2[1]-p1[1])/4.5);
            coords[5][2] = (int) (z+EXHEIGHT_H *4);
            coords[6] = coords[0];
            break;
        }
    }`