Skip to content

Савенко Дмитрий#258

Open
Asrom11 wants to merge 7 commits into
kontur-courses:masterfrom
Asrom11:master
Open

Савенко Дмитрий#258
Asrom11 wants to merge 7 commits into
kontur-courses:masterfrom
Asrom11:master

Conversation

@Asrom11

@Asrom11 Asrom11 commented Nov 14, 2024

Copy link
Copy Markdown

@Asrom11 Asrom11 changed the title Савенко Дмитрий Романович Савенко Дмитрий Nov 14, 2024

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Круто, что сразу разделил на два отдельных проекта - рабочая практика, чтобы тесты собирались и гонялись отдельно от сборки основного кода проекта

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Название файлика не совпадает с названием класса внутри

Comment thread cs/TagsCloudVisualizationTest/Tests.cs Outdated
}

var rectangles = layouter.GetRectangles();
rectangles.Count.Should().Be(100);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эта проверка тянет на отдельный тест, ведь текущий, судя по названию, должен проверять лишь круговое расположение, но не то, что все переданные прямоугольники смогли расположиться

Comment thread cs/TagsCloudVisualizationTest/Tests.cs Outdated
}

[Test]
public void GenerateLayout_ShouldCreateCircularCloud()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А нужен ли тест выше, если текущий почти полностью повторяет его работу за исключением размеров прямоугольников?

Comment on lines +100 to +105
private double GetDistanceFromCenter(Point point)
{
var dx = point.X - center.X;
var dy = point.Y - center.Y;
return Math.Sqrt(dx * dx + dy * dy);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Один и тот же метод дублируется дважды, тянет на вынесение в экстеншн

using System.IO;
using TagsCloudVisualization;

public class CircularCloudLayouter

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Кажется, что в этом классе смешались две ответственности - он и располагает прямоугольники, и умеет с файловой системой работать. Давай оставим один лейаутер и отдельную зависимость, которая будет уметь сохранять файл

namespace TagsCloudVisualizationTest;

[TestFixture]
public class RectangleLayouterTests

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давай ещё напишем а-ля нагрузочный тест, вставим оооочень много прямоугольников и проверим, что тест отработает за адекватное время

Comment on lines +8 to +9
[TestFixture]
public class LayoutGeneratorTests

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Только после ревью основного проекта понял, что тесты на этот класс особо и не были нужны, ведь он просто вызывает классы и методы, которые ты уже тестируешь в соседних тест-классах, то есть не имеет собственной бизнес-логики

Но раз уж они есть, то пусть остаются))


public Rectangle ShiftRectangleToCenter(Rectangle rectangle, List<Rectangle> rectangles)
{
if (rectangles.Any(r => r.IntersectsWith(rectangle)))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Перед вызовом метода ShiftRectangleToCenter ты в цикле генерировал точки, пока не добрался до возможности вставить прямоугольник без пересечения с другими прямоугольниками. То есть к моменту вызова текущего метода мы точно уверены, что прямоугольник ни с чем уже не пересекается и ветка внутри if точно не будет выполнена. Так что, если у тебя нет планов на этот код, можешь его смело грохать))

Comment on lines +39 to +40
if (rectangles.Any(r => r.IntersectsWith(nextRectangle)))
break;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На каждой итерации цикла сдвига ближе к центру эта проверка затрачивает серьезные ресурсы. Конечно, можно сейчас подзапариться за оптимизацию, но хочется делать это только после того как будет уверенность, что этот метод вообще нужен

Ты проверял, он правда более плотное облако генерирует? Может быть даже без шифтера получалось достаточно плотное облако?
Если проверял, давай обсудим на двух конкретных примерах - расположение облака с большим количеством прямоугольников с шифтером и без

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants