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

Брайденбихер Виктор Николаевич #9

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

Conversation

viteokB
Copy link

@viteokB viteokB commented Dec 18, 2024

@Inree, реализовал структуру решения, часть классов имеет конкретную протестированную функциональность.

DI контейнер планирую использовать Autofac.

В качестве клиента собираюсь создать оконное приложение используя WPF

Следующие пункты на перспективу собираюсь реализовать:

  • Поддерживать разные форматы файлов
  • Поддерживать разные форматы изображений
  • Реализовать несколько алгоритмов формирования облака тегов

{
public class TagCloudCreator
{
public readonly ICloudLayouter Layouter;
Copy link

Choose a reason for hiding this comment

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

А зачем public

Comment on lines 10 to 18
public class TagCloudWord(Rectangle box, string textWord, int fontSize)
{
public readonly Rectangle Box = box;

public readonly string TextWord = textWord;

public readonly int FontSize = fontSize;
}
}
Copy link

Choose a reason for hiding this comment

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

public readonly не принято писать. Если данные торчат наружу, то их принято оборачивать в свойство public Rectangle Box { get; }

Зачем: считается, что так мы можем более четко обозначить уровень доступа к свойству. Например, можно вообще убрать get и оставить только set, то есть клиент может записать свойство, но не посмотреть значение

А тут, если ты убрал конструктор наверх, можно вообще заменить на record TagCloudWord(Rectangle Box, string TextWord, int FontSize)

//WordReaders
builder.RegisterType<WordReaderFactory>().As<IWordReaderFactory>().SingleInstance();
builder.RegisterType<MultiFormatWordReader>().As<IWordReader>();
}
Copy link

Choose a reason for hiding this comment

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

Вот эти все регистеры убрать бы в отдельный файл. И заодно сделать приватными и создать один публичный метод RegisterAll

ImageSaveSettings imageSaveSettings,
ImageCreateSettings imageCreateSettings,
IWordReaderFactory wordReaderFactory,
WordReaderSettings wordReaderSettings,
Copy link

Choose a reason for hiding this comment

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

Все settings можно было передать в метод, а не в зависимости


public class BitmapCreator : IBitmapCreator
{
public static Bitmap GenerateImage(IEnumerable<TagCloudWord> cloudWords, ImageCreateSettings settings)
Copy link

Choose a reason for hiding this comment

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

Я чет не понял зачем вообще тогда интерфейс если метод статичный

Copy link
Author

Choose a reason for hiding this comment

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

Осознал, в чем неправильность статических методов при реализации интерфейсов в моем случае, исправил

public IEnumerable<string> Read()
{
return wordReader.Read();
}
Copy link

Choose a reason for hiding this comment

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

Чет не понял как это должно работать. wordReader же не инициализируется

Copy link
Author

Choose a reason for hiding this comment

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

Сам не знаю, исправил это

Copy link
Author

Choose a reason for hiding this comment

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

Я нашел почему это работало, я создавал ридера только при помощи фабрики в этом месте и нигде больше он не использовался

image

if (words == null) throw new ArgumentNullException(nameof(words), "Input words cannot be null.");

var filteredWords = words;
foreach (var filter in _filterStrategies) filteredWords = filter(filteredWords);
Copy link

Choose a reason for hiding this comment

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

Для этого есть Aggregate: filteredWords = _filterStrategies.Aggregate(words, (words, filter) => filter(words));


if (Enum.TryParse(partOfSpeechStr, out PartOfSpeech partOfSpeech)) return partOfSpeech;

return default;
Copy link

Choose a reason for hiding this comment

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

дефолтное значение енума - первое значение в списке, то есть прилагательное

Copy link
Author

Choose a reason for hiding this comment

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

Сделал UNKWON, в дальнейшем это значение отфильтровывается

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