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

Рушкова Ольга #29

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

Conversation

SomEnaMeforme
Copy link

No description provided.

Comment on lines 15 to 35
var builder = new ContainerBuilder();

builder.RegisterType<LowerCaseTransformer>().As<IWordTransformer>();
builder.RegisterType<BoredSpeechPartFilter>().As<IWordFilter>();
builder.RegisterType<RemoveEmptyWords>().As<IWordFilter>();
builder.RegisterType<CircularCloudLayouter>().As<ICloudLayouter>();
builder.RegisterType<CloudCreator>();
builder.RegisterType<CloudVisualizer>();
builder.RegisterType<DataProvider>();
builder.RegisterType<RandomWordColorDistributor>().As<IWordColorDistributor>();
builder.RegisterType<LiteratureTextParser>().As<IDataParser>();
builder.Register<Func<string, IFileDataSource>>(c =>
{
var ctx = c.Resolve<IComponentContext>();
return p => ctx.ResolveKeyed<IFileDataSource>(p);
});
builder.RegisterType<TxtFileDataSource>().Keyed<IFileDataSource>(".txt");
builder.RegisterType<DocFileDataSource>().Keyed<IFileDataSource>(".doc");
builder.RegisterType<DocxFileDataSource>().Keyed<IFileDataSource>(".docx");
builder.RegisterType<App>().SingleInstance();
builder.RegisterType<VisualizeSettings>().SingleInstance();

Choose a reason for hiding this comment

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

Давай создание DI контейнера выделим в отдельный метод и попробуй логически разделить регистрацию - хотим добавить новый фильтр идем в метод где регистрируются фильтры и добавляем - примерно такая логика чтобы была

Comment on lines +5 to +8
public interface IWordTransformer
{
public WordInfo Apply(WordInfo word);
}

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.

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

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

Choose a reason for hiding this comment

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

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


namespace TagCloudDI.WordHandlers
{
internal class RemoveEmptyWords : IWordFilter

Choose a reason for hiding this comment

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

Давай сделаем названия у фильтров такими, чтобы было понятно что это фильтры. То есть везде будем писать в конце Filter (EmptyWordsFilter)

{
public bool Accept(WordInfo word)
{
return word.InitialForm != "" || word.InitialForm != null;

Choose a reason for hiding this comment

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

string.IsNullOrEmpty

Comment on lines 31 to 33
builder.RegisterType<TxtFileDataSource>().Keyed<IFileDataSource>(".txt");
builder.RegisterType<DocFileDataSource>().Keyed<IFileDataSource>(".doc");
builder.RegisterType<DocxFileDataSource>().Keyed<IFileDataSource>(".docx");

Choose a reason for hiding this comment

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

Если на вход поступит файл с другим расширением, всё не должно развалиться, я не уверен, но вроде сейчас сломается так как не будет ни одной зарегистрированной реализации IFileDataSource

this.distributor = distributor;
}

public string CreateImage((string Word, double Frequency)[] source, string? filePath = null)

Choose a reason for hiding this comment

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

Не интуитивно понятно почему CreateImage возвращает string, может будем возвращать картинку и далее её уже как-то сохранять?

graphics.DrawString(currentWord.Word, font, new SolidBrush(color), currentWord.WordBorder);
}
imageSaver.SaveImage(image);
var resizedImage = new Bitmap(image, settings.ImageSize == Size.Empty ? tmpImageSize : settings.ImageSize);

Choose a reason for hiding this comment

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

Давай попытаемся избавиться от такой логики settings.ImageSize == Size.Empty и попытаемся сделать пользовательские настройки такими, чтобы если значение не задано или задано некорректное, то использовали какие-то дефолтные настройки.

Еще тут какая-то странная логика с ресайзами, не оч понял

Copy link
Author

Choose a reason for hiding this comment

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

По странной логике с ресайзами: я динамически рассчитываю размер картинки, чтобы облако в эту картинку точно влезло и двигаю облако внутрь этой картинки (чтобы не было ситуации, когда часть облака находится где-то за изображением). А потом уже скейлю получившуюся картинку по пользовательским настройкам

Можно сделать так: дефолтно рассчитывать динамически, а при наличии корректных пользовательских настроек не скейлить вообще, но тогда как будто бы всё равно появится логика с if

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