-
Notifications
You must be signed in to change notification settings - Fork 307
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
Заколюкин Степан #255
base: master
Are you sure you want to change the base?
Заколюкин Степан #255
Conversation
…конструктор класса
…иков, создание отчетов об ошибкаx
cs/TagsCloudVisualization/Program.cs
Outdated
.Save("../../../../TagsCloudVisualization/Task 2/CentralСloud.png"); | ||
|
||
visual.CreateAnImage(new CircularCloudLayouter(new Point(250, 150)), 50, 30, 80, 5, 25) | ||
.Save("../../../../TagsCloudVisualization/Task 2/SmalСloud.png"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно путь в константу вынести
|
||
<ItemGroup> | ||
<Folder Include="TestErrorReports\" /> | ||
</ItemGroup> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот этот блок вроде как можно удалить
public int DistanceBetweenTurns { get; private set; } | ||
public int InitialRadiusOfTheSpiral { get; private set; } | ||
public double AngleOfRotationInRadians { get; private set; } | ||
public double AngleChangeStep { get; private set; } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не увидел чтобы свойство менялось, можно убрать сеттер
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да и вообще лучше в константу вынести и убрать публик, тк это клиенту не надо, а ещё DistanceBetweenTurns, InitialRadius, AngleOfRotation. Это всё - реализация, клиенту не упало
Center в теории может пригодиться, наверное, можно оставить публичным
{ | ||
public static IEnumerable<Rectangle> GenerateCloudLayout(int amountRectangles, | ||
int startWidthRectangles, int endWidthRectangles, | ||
int startHeightRectangles, int endHeightRectangles, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
докопаюсь до нейминга. Лучше писать startRectangleWidth
А ещё есть Size, который хранит width и height, выйдет Size minSize, Size maxSize
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ещё сюда бы прикрутить валидацию, что min < max
return rectangle; | ||
} | ||
|
||
private Rectangle GetANewRectangle(Point centerPoint, Size rectangleSize) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
в именах не принято писать артикли
InitialRadiusOfTheSpiral = Math.Min(rectangleSize.Width, rectangleSize.Height) / 2; | ||
|
||
DistanceBetweenTurns = Math.Min(DistanceBetweenTurns, | ||
Math.Min(rectangleSize.Width, rectangleSize.Height) / 2); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ты 2 раза высчитываешь это, стоит вынести в переменную
Center = center; | ||
AngleChangeStep = 0.017; | ||
cloudOfRectangles = []; | ||
DistanceBetweenTurns = 30; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я не знаю почему это 30, наверное, стоит это вынести в конструктор чтобы абстрактный клиент мог это настроить
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вынести то можно, просто это значение потом все равно изменяется в методе PutNextRectangle в зависимости от самого маленького размера, который когда либо поступал в метод, это сделано для того чтобы увеличить кучность облака. Исходя из этого, я подумал, что наверное не будет смысла в возможности пользователя указать какое-то значение в конструкторе, т.к класс будет впоследствии его менять по определенному правилу
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ну я так понял оно будет меняться только в меньшую сторону, и, как ты сказал, оно влияет на кучность. Может, пользователь захочет облако побольше и чтобы между тегами было расстояние
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
как бы в целом, для решения задачи создания облака слов это справедливо, но если говорить конкретно об задаче из домашки, то там был такой критерий: "Облако должно быть плотным, чем плотнее, тем лучше."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Пон, пусть тогда будет так
@@ -17,16 +17,17 @@ public VisualizationCloudLayout(int width, int height, Color backgroundColor, IE | |||
RectanglePalette = rectanglePalette.ToArray(); | |||
} | |||
|
|||
public Bitmap CreateAnImage(Point center, int amountRectangles, | |||
public Bitmap CreateAnImage(CircularCloudLayouter cloudLayouter, int amountRectangles, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ну и тут тоже CreateImage
public class CircularCloudLayouterTests | ||
{ | ||
private readonly static List<Rectangle> listRectangles = []; | ||
private readonly static CircularCloudLayouter cloudLayouter; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
принято писать static readonly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
и статик не нужен
И я не понял как это работает: readonly поле не задаётся, но в конце TearDown его пробрасывает и вызывает
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это поле тут оказалась лишним, оно не использовалось для создания визуализации, я добавил перегрузку метода и убрал его
public readonly int Width; | ||
public readonly int Height; | ||
public readonly Color BackgroundColor; | ||
public readonly Color[] RectanglePalette; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут тоже публичность надо убрать, клиенту это не интересно
var path = "../../../../TagsCloudVisualization/TestErrorReports/сloud.png"; | ||
var visual = new VisualizationCloudLayout(1920, 1080, Color.White, colors); | ||
|
||
visual.CreateAnImage(cloudLayouter, 175, 30, 100, 5, 25, listRectangles) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вообще по хорошему следует передавать не layouter, а результат его работы, тк TearDown это уже доп операции с отчетом о тестах, отрубом баз данных, если были использованы, итд.
И в принципе передавать в аргументы объект, который совершает действие, это не хорошо, такого следует избегать. Делегаты - "вы не понимаете, это другое", тк там чаще всего передают функцию, совершающую мелкие и сходу понятные действия типа фильтрации или аггрегирования
@Inree