Как изменить слишком большой файл (получил предупреждение от StyleCop)? - PullRequest
3 голосов
/ 19 июля 2010

Я получаю предупреждение о моем файле от StyleCop.

  • Предупреждение 1 CR0005: файл очень длинный, 508 строк. Пожалуйста, рассмотрите возможность рефакторинга, чтобы сделать его 500 или меньше строк.

  • Предупреждение 2 CR0002: метод слишком длинный. Это 58 строк. Рассмотрите возможность рефакторинга, чтобы сделать его на 50 или меньше строк.

Как вы, ребята, вносите изменения в свои коды? Каковы лучшие практики для этого? Я понятия не имею, делить мои коды на более мелкие - боюсь, что мои коды станут такими сложными.

Так что, пожалуйста, помогите ^ _ ^!

Nam.

Ответы [ 7 ]

5 голосов
/ 19 июля 2010

Вы должны прочитать книгу Мартина Фаулера «Рефакторинг: улучшение дизайна существующего кода» и «Профессиональный рефакторинг в C # & ASP.NET» Даниэля Арсеновски.

4 голосов
/ 19 июля 2010

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

Может ли какой-нибудь код из метода быть извлечен в его собственный метод, чтобы его было легче понять? Если это так, сделайте это.

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

1 голос
/ 19 июля 2010

Я бы подавил предупреждения и беспокоился о более важных вещах.

Я не уверен, что имеет смысл налагать такое произвольное ограничение на размер файла или метода. Это не столько числа 50 и 500, сколько факт, что - это такое число. Откуда это взялось? Почему 50 строк считаются читаемыми, а 58 - нет?

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

0 голосов
/ 21 июля 2010

Это не правило, которое поставляется с StyleCop.Это то, что ваша компания разработала в доме?Мне любопытно обоснование правила.500 строк кажутся довольно строгим ограничением.

0 голосов
/ 19 июля 2010

Можно разделить определение класса или структуры или интерфейса на два или более исходных файла. Каждый исходный файл содержит раздел определения класса, и все части объединяются при компиляции приложения. Например, здесь класс 'bar' разделен между foo1.cs и foo2.cs.

foo1.cs

public partial class Bar
{
    public void bat()
    {
    }
}

foo2.cs

public partial class Bar
{
    public void baz()
    {
    }
}

Подробнее об этом см. Определения частичных классов (Руководство по программированию в C #)

0 голосов
/ 19 июля 2010

Другие упоминали рефакторинг, а также фокусировались на том, чтобы разбить класс, чтобы выполнить только 1x ответственность (часть правил S.O.L.I.D. для ООП). Тем не мение; если ваш класс все еще 500х строк, и выполняют одну ответственность, то вы не слишком ужасны.

Если ваш кодовый файл содержит документацию XML и пробелы, то 500x строк - это лишь немного больше (и это зависит от того, что он делает). Многие из моих «простых» классов заканчивают примерно 350 строками после завершения. Меньше - лучше, но лаконично - это действительно то, что вы хотите.

Еще одна хорошая книга для понимания того, как должен выглядеть ваш код: Чистый код Роберта К. Мартина . Он устанавливает много хороших правил при разработке хорошо продуманных классов и методов.

0 голосов
/ 19 июля 2010

Что ж, рефакторинг «Extract Method» очень полезен для сокращения методов (путем помещения их в другой метод), что, я считаю, в 2010 году. (Выделите некоторый код, щелкните правой кнопкой мыши, и он должен быть где-то в меню).

Лучший способ разбить файл (при условии, что в нем есть только один класс) - это извлечь некоторые функциональные возможности в другой класс.Google «Извлечь класс», и вы найдете некоторую информацию о нем.

Как говорит @Justin, на первый взгляд это может показаться более сложным, потому что есть больше файлов / методов, с которыми приходится иметь дело, но, поскольку каждый файл / метод меньше, меньше нужно иметь дело в любой момент времени.Некоторые (уважаемые) люди делают это действительно далеко .Требуется немного привыкнуть, но ваш код будет (возможно) лучше для этого.

...