Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

Asrom11
Copy link

@Asrom11 Asrom11 commented Nov 14, 2024

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

Choose a reason for hiding this comment

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

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

Choose a reason for hiding this comment

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

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

}

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

Choose a reason for hiding this comment

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

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

}

[Test]
public void GenerateLayout_ShouldCreateCircularCloud()

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);
}

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

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

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

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)))

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;

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