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

Шевелев Георгий #206

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

Conversation

Crazy1beatch
Copy link

Comment on lines 17 to 18
builder.Register(c =>
new Point(c.Resolve<Settings>().ImageWidth / 2, c.Resolve<Settings>().ImageHeight / 2)

Choose a reason for hiding this comment

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

А если еще какому-то классу понадобится точка?

Comment on lines 15 to 26
var builder = new ContainerBuilder();
builder.Register(c => settings);
builder.Register(c =>
new Point(c.Resolve<Settings>().ImageWidth / 2, c.Resolve<Settings>().ImageHeight / 2)
);
builder.RegisterType<ArchimedeanSpiral>().AsSelf();
builder.RegisterType<CircularCloudLayouter>().AsSelf();
builder.RegisterType<TextReader>().AsSelf();
builder.RegisterType<TextProcessor>().AsSelf();
builder.RegisterType<RectangleGenerator>().AsSelf();
builder.RegisterType<Drawer>().AsSelf();
builder.RegisterType<ConsoleApplication>().As<IApplication>();

Choose a reason for hiding this comment

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

Очень смущает прямая регистрация классов без интерфейсов, а если когда-то придется поменять реализацию какого-то из классов или просто добавить новую? Придется проходится по всем местам где эти классы используются. Интерфейсы очень полезный инструмент, который позволяет фиксировать четкие контракты и при необходимости подменять реализацию

{
public class RectangleGenerator(TextProcessor textProcessor, Settings settings, CircularCloudLayouter layouter)
{
public IEnumerable<(Rectangle rectangle, string word, float fontSize)> GetRectanglesData()

Choose a reason for hiding this comment

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

Ммм не уверен что кортеж (tuple) это хорошая идея, а если придется в возвращаемом значении еще что-то добавить? А если придется еще 100 значений добавить?

{
public class TextReader
{
public IEnumerable<string> GetWordsFrom(string filePath)

Choose a reason for hiding this comment

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

Вот отличный пример того, о чем я написал в контейнере. А если текст нужно будет прочитать из API? Сюда можно было бы передать ссылку на endpoint из которого можно получить текст

…и цвета, исправил на использование интерфейсов, добавил тесты на layouter
public void Run()
{
var image = drawer.GetImage();
image.Save(settings.SavePath + '.' + settings.ImageFormat.ToLower(), settings.GetFormat());

Choose a reason for hiding this comment

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

Может лучше интерполяцию строк?

foreach (var rectangleData in rectanglesGenerator.GetRectanglesData())
using (var font = new Font(settings.FontName, rectangleData.fontSize, FontStyle.Regular))
gr.DrawString(
rectangleData.word, font, new SolidBrush(Color.FromName(settings.TextColor)),

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