
已经很晚了。
我的同事刚刚将代码编写了他已经工作了一周的存储库。 然后,我们制作了一个图形编辑器,并在最新的代码中实现了在工作区域中更改形状的功能。 可以通过移动位于其边缘的小标记来修改形状(例如,矩形和椭圆形)。
该代码有效。
但是有许多相同类型的重复结构。 每个形状(如相同的矩形或椭圆形)都有一组不同的标记。 沿不同方向移动这些标记会以不同方式影响图形的位置和大小。 如果用户在移动标记的同时按住Shift键,则在更改图形大小时,我们还必须保留图形的比例。 通常,代码中有很多计算。
有问题的代码如下所示:
let Rectangle = {
resizeTopLeft(position, size, preserveAspect, dx, dy) {
},
resizeTopRight(position, size, preserveAspect, dx, dy) {
},
resizeBottomLeft(position, size, preserveAspect, dx, dy) {
},
resizeBottomRight(position, size, preserveAspect, dx, dy) {
},
};
let Oval = {
resizeLeft(position, size, preserveAspect, dx, dy) {
},
resizeRight(position, size, preserveAspect, dx, dy) {
},
resizeTop(position, size, preserveAspect, dx, dy) {
},
resizeBottom(position, size, preserveAspect, dx, dy) {
},
};
let Header = {
resizeLeft(position, size, preserveAspect, dx, dy) {
},
resizeRight(position, size, preserveAspect, dx, dy) {
},
}
let TextBlock = {
resizeTopLeft(position, size, preserveAspect, dx, dy) {
},
resizeTopRight(position, size, preserveAspect, dx, dy) {
},
resizeBottomLeft(position, size, preserveAspect, dx, dy) {
},
resizeBottomRight(position, size, preserveAspect, dx, dy) {
},
};
, , .
.
, . ,
Oval.resizeLeft()
, ,
Header.resizeLeft()
. , , .
, . ,
Oval.resizeLeft()
Oval
. — .
Rectangle
,
Header
TextBlock
, .
.
, - . — :
let Directions = {
top(...) {
},
left(...) {
},
bottom(...) {
},
right(...) {
},
};
let Shapes = {
Oval(...) {
},
Rectangle(...) {
},
}
, :
let {top, bottom, left, right} = Directions;
function createHandle(directions) {
}
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) {
}
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
, , «» .
… , .
, . . — . .
, , .
—
« » — , . , - , . , , , .
, , , . , . . , , : « , ». , .
,
, . , , , . . . - , — , . , «».
, «», , , :
- -, , . , . ( ), — . . — .
- -, . . . , . . «» .
, «» ? . , «» «». - ? - , , ? , , ? ,
?
, , . , — , , , .
— . , , , . , , , , . , . .
. . — . — - , . , , , , .
. — .
! « »?
