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

Routers #9

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

Routers #9

wants to merge 13 commits into from

Conversation

artemiipatov
Copy link
Owner

No description provided.

[Test]
public void DataFromFileShouldBeParsedCorrectly()
{
var inputFile = new StreamWriter(File.Open(inputFilePath, FileMode.Create));

Choose a reason for hiding this comment

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

Правильнее using var. А ещё правильнее потом файл удалить, чтобы избежать зависимости тестов друг от друга.

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

Choose a reason for hiding this comment

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

Надо сложить всё в один проект, не плодите без нужды .dll-ки. Сборка суть единица развёртывания, а не единица логической декомпозиции (к сожалению). Используйте вместо этого неймспейсы.


public int MaxNodeNumber { get; private set; }

public int[,] Matrix { get; private set; }

Choose a reason for hiding this comment

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

Даже если у неё приватный сеттер, враги могут залезть внутрь и её поменять — сеттер не даёт поменять ссылку на матрицу, но сама матрица — это вполне себе мутабельный объект, который может изменять каждый, кто имеет на него ссылку. Константность в C# неглубокая. Сделали бы лучше индексовое свойство с только геттером, или возвращали бы копию (что было бы плохо с точки зрения скорости работы).


public int[,] Matrix { get; private set; }

public Dictionary<(int, int), int> Edges { get; set; }

Choose a reason for hiding this comment

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

То же со словарями. Тут вообще стрёмно, потому что Matrix и Edges, наверное, должны находиться в какой-то логической зависимости друг от друга, но класс не может это гарантировать.


private void Parse(string inputFilePath)
{
using StreamReader reader = new StreamReader(inputFilePath);

Choose a reason for hiding this comment

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

Suggested change
using StreamReader reader = new StreamReader(inputFilePath);
using var reader = new StreamReader(inputFilePath);

Это как заикание, "using StreamReader-StreamReader" :)

}

graph.Matrix[firstNode, secondNode] = graph.Edges[key];
graph.Matrix[secondNode, firstNode] = graph.Edges[key];

Choose a reason for hiding this comment

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

Такое чувство, что Edges должно поддерживаться тут, а не в графе, а граф был бы тогда просто матрицей плюс парой методов для её удобной модификации и анализа


int firstNode = key.Item1;
int secondNode = key.Item2;
graph.DeleteEdge(firstNode, secondNode);

Choose a reason for hiding this comment

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

Алгоритм Краскала наоборот — удаляем рёбра, пока граф связный? :) Хорошо, но требует гонять DFS на каждом шагу, что как-то не очень с точки зрения скорости работы (тем более что граф остаётся связным, то есть на каждом шагу надо посетить все вершины). Честный Краскал с СНМ работал бы заметно быстрее.

using System.Runtime.Serialization;

[Serializable]
public class WrongInputException : Exception

Choose a reason for hiding this comment

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

Исключению тоже нужен комментарий

Assert.AreEqual(outputFile.ReadLine(), "3: 5(17)");
outputFile.Close();

inputFile = new StreamWriter(File.Open(inputFilePath, FileMode.Create));

Choose a reason for hiding this comment

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

Много тестовых сценариев => много тестов. И тоже надо бы собрать все тесты в один проект.


string inputFilePath = "../../../input.txt";
string outputFilePath = "../../../output.txt";
RoutersUtility.GenerateConfig(inputFilePath, outputFilePath);

Choose a reason for hiding this comment

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

А заказывали ещё ругань на несвязность графа, а не сделано. Да и пути в качестве параметров не сделаны. То есть в реальной жизни это провал приёмочных испытаний и доработка за счёт разработчика (плюс, возможно, неустойка), а сейчас минус балл :)

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