Auf Wiedersehen sauberer Code



Es war später Abend.

Mein Kollege hat gerade Code in das Repository geschrieben, an dem er eine Woche gearbeitet hat. Wir haben dann einen grafischen Editor erstellt und im neuen Code die Möglichkeit implementiert, die Formen im Arbeitsfeld zu ändern. Formen, z. B. Rechtecke und Ovale, können durch Verschieben kleiner Markierungen an ihren Rändern geändert werden.

Der Code hat funktioniert.

Aber es gab viele sich wiederholende Strukturen des gleichen Typs. Jede Form (wie das gleiche Rechteck oder Oval) hatte einen unterschiedlichen Satz von Markierungen. Das Verschieben dieser Marker in verschiedene Richtungen wirkte sich auf die Position und Größe der Figur auf unterschiedliche Weise aus. Und wenn der Benutzer beim Bewegen der Marker die Umschalttaste gedrückt hielt, mussten wir auch die Proportionen der Figur beibehalten, wenn wir ihre Größe änderten. Im Allgemeinen gab es viele Berechnungen im Code.

Der fragliche Code sah ungefähr so ​​aus:

let Rectangle = {
  resizeTopLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeTopRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeBottomLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeBottomRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },
};

let Oval = {
  resizeLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeTop(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeBottom(position, size, preserveAspect, dx, dy) {
    // 10   
  },
};

let Header = {
  resizeLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },  
}

let TextBlock = {
  resizeTopLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeTopRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeBottomLeft(position, size, preserveAspect, dx, dy) {
    // 10   
  },
  resizeBottomRight(position, size, preserveAspect, dx, dy) {
    // 10   
  },
};

, , .

.

, . , Oval.resizeLeft() , , Header.resizeLeft(). , , .

, . , Oval.resizeLeft() Oval. — . Rectangle, Header TextBlock, .

.

, - . — :

let Directions = {
  top(...) {
    // 5   
  },
  left(...) {
    // 5   
  },
  bottom(...) {
    // 5   
  },
  right(...) {
    // 5   
  },
};

let Shapes = {
  Oval(...) {
    // 5   
  },
  Rectangle(...) {
    // 5   
  },
}

, :

let {top, bottom, left, right} = Directions;

function createHandle(directions) {
  // 20  
}

let fourCorners = [
  createHandle([top, left]),
  createHandle([top, right]),
  createHandle([bottom, left]),
  createHandle([bottom, right]),
];
let fourSides = [
  createHandle([top]),
  createHandle([left]),
  createHandle([right]),
  createHandle([bottom]),
];
let twoSides = [
  createHandle([left]),
  createHandle([right]),
];

function createBox(shape, handles) {
  // 20  
}

let Rectangle = createBox(Shapes.Rectangle, fourCorners);
let Oval = createBox(Shapes.Oval, fourSides);
let Header = createBox(Shapes.Rectangle, twoSides);
let TextBox = createBox(Shapes.Rectangle, fourCorners);

, , , . ! . , , , , .

( ). master , , «» .


… , .

, . . — . .

, , .


« » — , . , - , . , , , .

, , , . , . . , , : « , ». , .

, , . , , , . . . - , — , . , «».

, «», , , :

  • -, , . , . ( ), — . . — .
  • -, . . . , . . «» .

, «» ? . , «» «». - ? - , , ? , , ? , ?

, , . , — , , , .

— . , , , . , , , , . , . .

. . — . — - , . , , , , . 

. — .

! « »?

Source: https://habr.com/ru/post/de484610/


All Articles