Лучше ли объявлять все методы, которые будут вызываться из main () как статические, или создавать объект класса, содержащий все методы, включая main? - PullRequest
1 голос
/ 27 апреля 2019

Мне нужно знать в целом, какой способ предпочтительнее в сценариях, подобных приведенным ниже:

У меня есть основная функция в классе «Программа» наряду с несколькими другими функциями. Я разбил свою логику на функции и вызывал все это из своего основного.

Теперь, чтобы вызвать функции из основного, у меня есть две опции:

1 - сделать все методы статичными

2 - Создайте объект класса «Программа» в main () и вызовите object.Method ()

Я хочу изучить предпочтительный способ для всех моих будущих попыток кодирования

У меня есть что-то вроде


class Program
{
    public static void main()
    {
        CheckFile();
        ReadFiles();
        PushToDB(); 
    }

    private bool CheckFile() {...}

    private string[] ReadFiles() {...}

    private string PushToDB() {...}
}

Ответы [ 2 ]

2 голосов
/ 28 апреля 2019

TL; DR Лучше поместить ваш код в свои собственные классы, а не непосредственно в консольное приложение, если это не тривиально.


Насколько это практично, наш код не должен знать, выполняется ли он в консольном приложении, веб-приложении и т. Д.

Итак, хотя нет какого-то правила, вот предложение о том, куда поместить ваш код:

  • Лучший - создать отдельную библиотеку классов и поместить туда свой класс.
  • Второй лучший вариант - создать приложение для модульного тестирования и поместить туда свой класс. Вы можете переместить его позже.
  • Третий лучший - создать отдельный класс в вашем консольном приложении. Вы можете переместить его позже.
  • Дальний четвертый, не идеальный: поместите его прямо в Program класс.

Причина, по которой помещение ее в отдельную библиотеку классов помогает, заключается в том, что она поможет вам избежать случайной записи в вывод консоли (Console.WriteLine) в вашем классе, поскольку ваш класс не знает, выполняется ли он в консольном приложении. или где-то еще.

Независимо от того, где вы размещаете классы, отдельные классы лучше, потому что это побуждает вас разбивать даже небольшие функциональные возможности на отдельные блоки. Я не говорю, что мы должны быть жесткими по этому поводу, но это облегчает жизнь.

Например, вы можете создать один класс, который выполняет только часть ReadFiles, а другой - для части PushToDb. Если вы создадите такой класс:

public class FileReader
{
    public string[] ReadFile(string filePath)
    {
        // read some files and populate some data
    }
}

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

Причина, по которой я упоминаю проект модульного тестирования, заключается в том, что также проще тестировать отдельные фрагменты кода в проекте модульного тестирования, чем в консольном приложении. Если вы хотите протестировать фрагмент кода в консольном приложении, вы должны отредактировать его для запуска этой части, затем снова отредактировать для запуска этой части и т. Д.

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

И, хотя я не включил в этот ответ никакого реального объяснения модульных тестов, это действительно отличная привычка. Мне бы хотелось знать о них годами, когда я постоянно писал консольные приложения для тестирования своего кода. Модульные тесты - это отличная привычка, которую некоторые разработчики, как я, учат поздно, а некоторые никогда не учатся. Если вы привыкнете рано, это сделает ваше будущее программирование намного веселее и проще.

0 голосов
/ 28 апреля 2019

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

С другой стороны, если программа больше и сложнее, то в какой-то момент она сама скажет вам, что ей нужно более тонкоемашиностроение.?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...