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

Алешев Руслан #215

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

Conversation

artBETEP
Copy link

@artBETEP artBETEP commented Dec 4, 2023

Реализованы базовые требования.
Сделана сохранение изображений при ошибке.
Добавлен README.md и изображения с примерами.

RRAleshev and others added 2 commits December 4, 2023 20:35
Реализованы базовые требования.
Сделана сохранение изображений при ошибке.
Добавлен README.md и изображения с примерами.
@artBETEP artBETEP changed the title Prechecking Алешев Руслан Dec 4, 2023
public class CircularCloudLayouter
{
private readonly Point center;
private List<Rectangle> cloud;

Choose a reason for hiding this comment

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

Лучше IList, а то и вовсе ICollection. Это позволит не привязываться к реализации коллекции и поменять ее в любой момент

Comment on lines 18 to 20
int i = 0;
float it = (float)Math.PI / 21;
float ri = 50;

Choose a reason for hiding this comment

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

Нужны говорящие имена, модификаторы доступа, мб еще какие-нибудь. Можно даже summary, поясняющее физический смысл полей

{
if (center.X <= 0 || center.Y <= 0)
throw new ArgumentException("Central point coordinates should be in positive");
cloud = new List<Rectangle>();

Choose a reason for hiding this comment

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

В CreateCloud всё равно будет создан новый лист. Мб тогда здесь это не нужно


while (true)
{
bool findPlace = true;

Choose a reason for hiding this comment

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

Здесь и во многих других местах - var

return rect;
}

public List<Rectangle> CreateCloud(List<Size> rectangleSizes)

Choose a reason for hiding this comment

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

Тут 2 варианта:

  • Либо менять возвращаемый тип на IReadonlyCollection, чтобы никто снаружи при получении списка прямоугольников не мог на него как-то влиять (очистить, например)
  • Либо не возвращать здесь вообще ничего, завести отдельную проперть и использовать ее во всех необходимых местах

Еще, мне как потенциальному пользователю твоего класса не ясна его роль. Например, что если я вызову этот метод 2 раза? Список старых прямоугольников очистится, но функция продолжить работать со старого индекса, получится не оч. Нужно решить как оно должно себя вести - пересоздавать или дополнять и дать соответствующее название

return image;
}

private Point GetNextPoint()

Choose a reason for hiding this comment

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

Если знаком с перечислениями, было бы наглядно переписать на IEnumerable<Point> с yield return. Таким образом получится спрятать неприятный бесконечный цикл в этой небольшой функции

{
cloud = new List<Rectangle>();

foreach (var rectangleSize in rectangleSizes)

Choose a reason for hiding this comment

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

Если знаком с LINQ, можно схлопнуть всю функцию буквально в одну строку

Comment on lines 46 to 53
foreach (var previous in cloud)
{
if (rect.IntersectsWith(previous))
{
findPlace = false;
break;
}
}

Choose a reason for hiding this comment

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

Если знаком с LINQ, можно схлопнуть всю функцию буквально в одну строку

[TestCase(123)]
public void CreateCloud_ReturnCorrectNumberOfRectangles(int rectCount)
{
var layouter = new CircularCloudLayouter(new Point(50, 50));

Choose a reason for hiding this comment

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

  • Давай явно обозначим комментариями где какая часть AAA
  • Объект тестируемого класса часто называются sut (system under testing). Это помогает быстрее ориентироваться в тесте

[TestCase(10)]
[TestCase(20)]
[TestCase(200)]
public void CreateCloud_RectanglesShouldNotIntersect(int rectCount)

Choose a reason for hiding this comment

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

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

RRAleshev added 2 commits December 10, 2023 15:38
Создание точек вынесено в отдельный класс с интерфейсом IPointsProvider
При падении тестов на раскладку сохраняется файл с изображением
Поправлены замечания
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