Skip to content

Бабинцев Г.В.#34

Open
qreaqtor wants to merge 1 commit intokontur-courses:masterfrom
qreaqtor:homework
Open

Бабинцев Г.В.#34
qreaqtor wants to merge 1 commit intokontur-courses:masterfrom
qreaqtor:homework

Conversation

@qreaqtor
Copy link
Copy Markdown

homework


namespace TagCloud.API
{
public class ConsoleAPI
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Замечание про семантику. API - это интерфейс для программ. А это у тебя UI

@@ -0,0 +1,11 @@
namespace TagCloud.ReadWriter
{
public interface IReadWriter
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Вот эту штуку я не понял. У тебя смешалась функциональность работы с файлами и с консолью, что, на мой взгляд, плохо. И то и другое - это чтение (интерфейс назван корректно). Но взаимодействие с консолью это UI, а с файлами - это функциональная часть библиотеки. Получается, что если захочется сделать GUI, то придется либо тащить туда что-то про консоль, либо переписывать код чтения файлов.


public IEnumerable<Word> GetProcessedData(IEnumerable<string> wordsData, IEnumerable<string> boringWords)
{
var cache = new Dictionary<string, int>();
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

cache[word]++;
}

var sortedWords = cache.OrderBy(wordCountPair => cache[wordCountPair.Key]);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

wordCountPair => cache[wordCountPair.Key] проще wordCountPair => wordCountPair.Value

var fontIncreaseByWordLevel = appConfig.FontConfig.FontIncreaseByWordLevel;
var defaultSize = appConfig.FontConfig.FontSize;

return defaultSize + sizeLevel * fontIncreaseByWordLevel;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

На практике такой алгоритм не особо применим, в реальном тексте (особенно большом) разброс по встречаемости будет очень большой - второе слагаемое будет сильно отличаться.
Еще не очевидно, что относительные размеры слов разной встречаемости зависят от defaultSize. Если defaultSize маленький, то разброс будет большой, если defaultSize большой, то разброс наоборот маленький.

Я бы пробовал приращивать defaultSize по логарифмической функции.

{
public interface ICloudLayouter
{
RectangleF GetPossibleNextRectangle(IEnumerable<WordTag> cloudRectangles, SizeF rectangleSize);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Смешение ответственности произошло. Лэйоутеру не нужны слова, он отдает прямоугольник, и работать должен с прямоугольниками

return FindPossibleNextRectangle(cloudRectangles, rectangleSize);
}

private RectangleF FindPossibleNextRectangle(IEnumerable<WordTag> cloudRectangles, SizeF rectangleSize)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Каждый раз пытаешь класть прямоугольник в центр. - Действие после размещения первого прямоугольника бессмысленное. На большом количестве прямоугольников работать будет плохо.

{
public interface ICloudDrawer
{
void DrawWordsAndSave(IEnumerable<WordTag> words);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

{
var wordsData = new List<string>()
{
"������",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

проблемс с кодировкой


namespace TagCloud.Config
{
public class AppConfig
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Еще про эту штуку вспомнил. Такой класс с настройками плохо. Лучше было сделать отдельные классы конфигураций для каждого сервиса. + Настройки у тебя плохо инкапсулированы. Setter-ы надо делать приватными (или заменять на init)

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