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

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

qreaqtor
Copy link

homework


namespace TagCloud.API
{
public class ConsoleAPI

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

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>();

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]);

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;

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);

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)

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);

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>()
{
"������",

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

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