What1slove / RefactoringLab

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

Одержимость примитивными типами (Spike) #15

Open What1slove opened 4 years ago

What1slove commented 4 years ago

Методы getSpinnerCoords и getCoords Неуместное использование массивов int когда данные имеют смысл Почему плохо: 1 Очень тяжело читается и понимается 2 Можем забыть какая ячейка массива каким данным соответствует 3 При изменении бизнес-логики придётся всё менять и переписывать Код: public List<int[]> getCoords(Level lev){ int[][] coords=new int[2][3]; Column c = lev.getColumns().get(colnum); int[] p1 = c.getFrontPoint1(); int[] p2 = c.getFrontPoint2(); coords[0][0]=p1[0] + (p2[0] - p1[0])/2; coords[0][1]=p1[1] + (p2[1] - p1[1])/2; coords[0][2]=Board.LEVEL_DEPTH; coords[1][0]=coords[0][0]; coords[1][1]=coords[0][1]; coords[1][2]=Board.LEVEL_DEPTH - length; return Arrays.asList(coords); } public List<int[]> getSpinnerCoords(Level lev){ int nCoords = 16; int[][] coords=new int[nCoords][3]; Column c = lev.getColumns().get(colnum); int[] p1 = c.getFrontPoint1(); int[] p2 = c.getFrontPoint2(); int[] mp = new int[2]; mp[0] = p1[0] + (p2[0]-p1[0])/2; mp[1] = p1[1] + (p2[1]-p1[1])/2; int colWidth = (int)Math.sqrt(Math.pow((p2[0]-p1[0]),2) + Math.pow((p2[1]-p1[1]),2)); int origRadius = colWidth/3; int radius = origRadius; float rad_dist = (float) (3.1415927 * 2)*3; float step = rad_dist/(nCoords); int ct = 0; for (double rads=spinnerangle; ct < nCoords; rads+=step, ct++) { coords[ct][0] = mp[0] - (int)(Math.sin(rads) * radius * .85); coords[ct][1] = mp[1] - (int)(Math.cos(rads) * radius); coords[ct][2] = spinnerz; radius = origRadius *ct/nCoords; } return Arrays.asList(coords); }