-
Notifications
You must be signed in to change notification settings - Fork 32
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
Бабинцев Г.В. #34
base: master
Are you sure you want to change the base?
Бабинцев Г.В. #34
Conversation
|
||
namespace TagCloud.API | ||
{ | ||
public class ConsoleAPI |
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.
Замечание про семантику. API - это интерфейс для программ. А это у тебя UI
@@ -0,0 +1,11 @@ | |||
namespace TagCloud.ReadWriter | |||
{ | |||
public interface IReadWriter |
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.
Вот эту штуку я не понял. У тебя смешалась функциональность работы с файлами и с консолью, что, на мой взгляд, плохо. И то и другое - это чтение (интерфейс назван корректно). Но взаимодействие с консолью это UI, а с файлами - это функциональная часть библиотеки. Получается, что если захочется сделать GUI, то придется либо тащить туда что-то про консоль, либо переписывать код чтения файлов.
|
||
public IEnumerable<Word> GetProcessedData(IEnumerable<string> wordsData, IEnumerable<string> boringWords) | ||
{ | ||
var cache = new Dictionary<string, int>(); |
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.
Тут не очень clean code. Cache это очень абстрактно, лучше придумывать названия отражающие смысл в терминах твоей предметной области.
cache[word]++; | ||
} | ||
|
||
var sortedWords = cache.OrderBy(wordCountPair => cache[wordCountPair.Key]); |
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.
wordCountPair => cache[wordCountPair.Key]
проще wordCountPair => wordCountPair.Value
var fontIncreaseByWordLevel = appConfig.FontConfig.FontIncreaseByWordLevel; | ||
var defaultSize = appConfig.FontConfig.FontSize; | ||
|
||
return defaultSize + sizeLevel * fontIncreaseByWordLevel; |
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.
На практике такой алгоритм не особо применим, в реальном тексте (особенно большом) разброс по встречаемости будет очень большой - второе слагаемое будет сильно отличаться.
Еще не очевидно, что относительные размеры слов разной встречаемости зависят от defaultSize. Если defaultSize маленький, то разброс будет большой, если defaultSize большой, то разброс наоборот маленький.
Я бы пробовал приращивать defaultSize по логарифмической функции.
{ | ||
public interface ICloudLayouter | ||
{ | ||
RectangleF GetPossibleNextRectangle(IEnumerable<WordTag> cloudRectangles, SizeF 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.
Смешение ответственности произошло. Лэйоутеру не нужны слова, он отдает прямоугольник, и работать должен с прямоугольниками
return FindPossibleNextRectangle(cloudRectangles, rectangleSize); | ||
} | ||
|
||
private RectangleF FindPossibleNextRectangle(IEnumerable<WordTag> cloudRectangles, SizeF 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.
Каждый раз пытаешь класть прямоугольник в центр. - Действие после размещения первого прямоугольника бессмысленное. На большом количестве прямоугольников работать будет плохо.
{ | ||
public interface ICloudDrawer | ||
{ | ||
void DrawWordsAndSave(IEnumerable<WordTag> words); |
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 wordsData = new List<string>() | ||
{ | ||
"������", |
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.
проблемс с кодировкой
|
||
namespace TagCloud.Config | ||
{ | ||
public class AppConfig |
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.
Еще про эту штуку вспомнил. Такой класс с настройками плохо. Лучше было сделать отдельные классы конфигураций для каждого сервиса. + Настройки у тебя плохо инкапсулированы. Setter-ы надо делать приватными (или заменять на init)
homework