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

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

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

Conversation

viteokB
Copy link

@viteokB viteokB commented Nov 25, 2024

@viteokB viteokB changed the title Брайденбихер Виктор Николевич Брайденбихер Виктор Николаевич Nov 25, 2024

namespace Markdown.MarkdownRenders
{
public interface IMarkdownRender

Choose a reason for hiding this comment

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

Render -> Renderer

public AstNode(AstNode parent, Tag tag)
{
ParentToken = parent;
ParentToken.ChildsTokens.Add(this);

Choose a reason for hiding this comment

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

NRE

Comment on lines 12 to 15
public static bool IsHash(this Token token)
{
throw new NotImplementedException();
}

Choose a reason for hiding this comment

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

Для чего этот метод нужен будет? Не очень понятно из названия - IsHash

Comment on lines 24 to 27
TagType = tagType;
Content = content;
this.level = level;
Content = string.Empty;

Choose a reason for hiding this comment

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

Content = content;
...
Content = string.Empty;

Comment on lines 33 to 39
public Tag CheckCompleted()
{
if (IsCompleted || SelfCompeted)
return this;

return new TextTag(this.Content);
}

Choose a reason for hiding this comment

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

Снова не понятно, что за метод 😓. Из названия хочется думать - "Проверить завершенность", т.е. закрылся ли тэг или что-то подобное, на деле возвращаем новый TextTag?

Comment on lines 11 to 17
Document,
Header,
Italic,
Bold,
Paragraph,
BulletedList,
Text

Choose a reason for hiding this comment

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

Document, Text - это что за теги в HTML?

Comment on lines 30 to 33
var tokens = markdownTokenizer.Tokenize(text);
var rootNode = markdownParser.Parse(tokens);

return render.Render(rootNode);

Choose a reason for hiding this comment

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

Возможно немного перемудрил с проектированием. Нам недостаточно следовать такого плана?

  1. markdown строку разбиваем на токены
  2. из токенов собираем html строку

Пока не совсем ясно для чего нужны и тэги и токены и ноды. Возможно в ходе написания самой логики это будет более очевидно. Можешь это не переделывать, а потом мы посмотрим как это всё будет взаимодействовать, а можешь подумать немного в сторону упрощения.

Choose a reason for hiding this comment

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

Сейчас так понимаю схема такая: markdownStr -> Tokens -> Nodes (Tags) -> htmlStr


namespace Markdown.MarkdownRenders.ConcreteMarkdownRenders
{
public class HtmlRender : IMarkdownRender

Choose a reason for hiding this comment

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

HtmlRender_er_

HtmlRender наследуется от MarkdownRender звучит не очень логично)

Comment on lines 11 to 12
namespace Markdown.TokenizerClasses.ConcreteTokenizers
{

Choose a reason for hiding this comment

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

Придерживайся везде единого стиля. Рядом лежат две папки: Parsers, Renderers внутри которых папка с конкретными реализациями, рядом лежат интерфейсы и вспомогательные классы. А тут в названии откуда-то "Classes"

@ksamnole
Copy link

Верхнеуровнево я понял твою идею: разбивать исходную строку на токены, разбивать токены на дерево, и дерево приводить к конечной html строке. Ты написал довольно конкретные методы, значит у тебя уже есть какая-то идея, но пока код плохо передает основную идею. Есть фабрика токенов, в тэгах дополнительные методы и прочее. Сейчас не ясно зачем всё это нужно. Опиши идею и можем постараться придумать более понятные абстракции, контракты и банально названия.

@viteokB
Copy link
Author

viteokB commented Nov 27, 2024

Моя идея первоначально - да была в том, чтобы разбивать строку на токены(слова, пробелы, цифры, #, _ и т.п.), а уже после составить дерево, проходя узлы которого мы сможем распознать различные сложные ситуации с тегами. И выполнять различную логику проверки.

Но после большого числа попыток реализовать свой замысел я понял, что он слишком сложен, т.к. я не пришел к конечному решению

@ksamnole
Copy link

ksamnole commented Dec 8, 2024

Привет! Посмотрел изменения, хочу сказать, что надо сильно поработать над наименованиями методов, классов и т.д. так как очень сложно понять что должен сделать метод/класс, не заглядывая в саму реализацию. По домашке, ты сделал маркерованный список и это круто, но у тебя пока не проходят тесты на базовые теги (_, __, #) в соответствии со спецификацией. Постарайся это починить, пожалуйста.

@ksamnole
Copy link

Привет! Проверил решение. В итоге:

  1. У тебя поддерживаются базовые теги _, __, # и написаны тесты
  2. Ты изначально сделал хорошее проектирование, разбил всё на составные части, но решение читается достаточно трудно. В коде много дополнительной логики и сейчас получается так, что масштабирование в итоге может привести к поломке решения. Также есть "костыли", неиспользуемый код и много неочевидного кода. Я бы посоветовал перед отправкой решения еще раз проходить по коду и делать ревью самого себя.
  3. Дополнительные теги ты реализовал, но читаемость кода упала.

Поставлю 2 балла за решение, но с надеждой, что в будущем ты будешь исправлять эти недочеты. Особенно удели время код стайлу, пожалуйста)

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