Categorieën: Alle - зависимость - типы - интерфейс

door Никитка Мурь 2 jaren geleden

123

Рекомендации по написанию кода на C#

При написании кода на C# важно соблюдать ряд рекомендаций для проектирования классов и использования фреймворка. В частности, рекомендуется использовать интерфейсы вместо базовых классов для поддержания нескольких реализаций и обеспечения слабой связанности между классами.

Рекомендации по написанию кода на C#

Рекомендации по написанию кода на C#

РЕКОМЕНДАЦИИ ПО ИСПОЛЬЗОВАНИЮ ФРЕЙМВОРКА

AV2221 Используйте лямбда-выражения вместо делегатов
AV2220 Избегайте использования LINQ для простых выражений
AV2230 Используйте ключевое слово dynamic только при работе с объектами этого типа
AV2235 Старайтесь использовать async/await вместо Task
AV2205 Тщательно задавайте названия свойств, переменных или полей, ссылающихся на локализованные ресурсы
AV2207 Не оставляйте в коде строки, которые должны бфыть изменены во время развертывания приложения
AV2210 Осуществляйте сборку с наивысшим уровнем предупреждений
AV2215 Тщательно заполняйте атрибуты в файле AssemblyInfo.cs
AV2201 Используйте псевдонимы типов C# вместо типов из пространства имен System

РЕКОМЕНДАЦИИ ПО СОЗДАНИЮ ДОКУМЕНТАЦИИ

AV2310 Избегайте инлайновых комментариев
AV2316 Пишите комментарии только для того, чтобы объяснить комплексные решения и алгоритмы
AV2318 Не используйте комментарии для отслеживания работы, которая должна быть сделана позднее
AV2306 При написании XML документации помните о другом разработчике
AV2307 Используйте MSDN стиль написания документации
AV2301 Пишите комментарии и документацию на американском английском
AV2305 Документируйте все public, protected и internal типы и члены

РЕКОМЕНДАЦИИ ПО ОФОРМЛЕНИЮ

AV2400 Используйте общие правила оформления
AV2402 Располагайте и группируйте пространства имен в соответствии с названием компании
AV2406 Располагайте члены класса в строго определенном порядке
AV2407 Будьте осторожны с использованием ключевого слова #region

ПО ПРОЕКТИРОВАНИЮ КЛАССОВ

AV1001 Создавайте новые экземпляры класса с помощью конструктора таким образом, чтобы в результате вы получили полностью готовый к использованию объект
AV1004 Используйте интерфейс, а не базовый класс, чтобы поддерживать несколько реализаций
AV1005 Используйте интерфейс для реализации слабой связанности между классами
AV1013 Не ссылайтесь на производные классы из базового класса
AV1011 Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом
AV1025 Классы должны иметь состояние и поведение
AV1010 Не скрывайте унаследованные элементы за ключевым словом new
AV1020 Избегайте двунаправленной зависимости
AV1014 Объект должен обладать ограниченным знанием о других объектах, которые не имеют непосредственного отношения к этому объекту
AV1008 Избегайте статических классов
AV1003 Интерфейс должен быть небольшим и должен быть сфокусирован на решении одной задачи
AV1000 Класс или интерфейс должны иметь единственное предназначение

РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ ЧЛЕНОВ КЛАССА

AV1100 Свойства класса должны иметь возможность быть установленными в любом порядке
AV1110 Не используйте взаимоисключающие свойства
AV1125 Не выставляйте объекты, описывающие состояние, посредством статических членов
AV1137 Определяйте параметры настолько специфичными, насколько это возможно
AV1140 Используйте типы, характерные для вашей предметной области, вместо примитивов
AV1135 Свойства, методы или аргументы, которые представляют из себя строку или коллекцию, никогда не должны быть равны null
AV1115 Метод или свойство должны иметь единственное предназначение
AV1105 Используйте метод вместо свойства

РЕКОМЕНДАЦИИ ПО ПОВЫШЕНИЮ ПРОИЗВОДИТЕЛЬНОСТИ

AV1835 Опасайтесь взаимной блокировки async/aфwait в однопоточном окружении
AV1830 Избегайте использования await/async с Task.Wait
AV1800 Используйте Any(), чтобы проверить IEnbmerable на пустоту
AV1820 Используйте async только для долговременных и низкоинтенсивных задач
AV1825 Используйте Task.Run для высокоинтенсивных задач

РЕКОМЕНДАЦИИ ПО ИМЕНОВАНИЮ

AV1745 Именуйте группы методов расширений в классе с использованием суффикса Extentions
AV1739 Используйте символ подчеркивание для параметров лямбда-выражений, которые не имеют значения
AV1725 В названиях пространств имен используйте имена собственные, названия модулей (слоев), глаголы и слова, описывающие особенности данного пространства имен
AV1715 Не ленитесь давать подходящие названия свойствам
AV1755 Добфавляйте суффиксы Async или TaskAsync к названиям асинхронных методов
AV1735 Используйте глагол или словосочетание с глаголом в названии события
AV1737 Используйте –ing и –ed для событий, которые должны случиться перед и после какого-либо другого события
AV1720 Именуйте методы, используя связку глагол-объект
AV1712 Избегайте коротких имен или имен, которые можно спутать с другими наименованиями
AV1738 Используйте приставку On в названии обработчика события
AV1701Используйте американский английский язык
AV1704 Не включайте числа в наименования переменных, параметров и типов
AV1707 Называйте члены класса, параметры и переменные в соответствии с их назначением, а не типом
AV1702 Для каждого элемента языка используйте соответствующую нотацию
AV1706 Не используйте аббревиатуры
AV1705 Не используйте префиксы в названиях полей
AV1708 Именуйте типы, используя словосочетания из существительных или прилагательных
AV1709 При именовании параметров универсальных типов используйте описательные имена
AV1711 Давайте элементам такие названия, которые схожи с элементами связанных с ними классов .NET Framework
AV1710 Не повторяйте имя класса или перечисления в названиях их членов

Главная тема

AV1564 Не создавайте методы, которые принимают в качестве параметра логическое значение
AV1555 Избегайте использования именованных аргументов
AV1562 Не используйте ref и out в параметрах
AV1570 Всегда проверяйте результат, возвращаемый оператором as
AV1568 Не используйте параметры в качестве временных переменных
AV1551 Вызывайте наиболее перегруженный метод из других перегрузок
AV1547 Инкапсулируйте комплексное выражение в методе или свойстве
AV1545 Не используйте блок if-else вместо простого (условного) присваивания
AV1540 Старайтесь избегать нескольких объявлений return
AV1575 Не оставляйте закомментированные участки кода
AV1537 Заканчивайте каждый блок if-else-if объявлением else
AV1536 Всегда используйте блок default в конце конструкции switch/case
AV1535 Всегда используйте конструкции if, else, while, for, foreach и case с фигурными скобками
AV1532 Избегайте вложенных циклов
AV1553 Используйте необязательные аргументы только для того, чтобы заменять перегрузки
AV1502 Избегайте двойного отрицания
AV1530 Не изменяйте переменную цикла for или foreach внутри тела цикла
AV1525 Не производите явного сравнения с trueили false
AV1523 Предпочитайте инициализаторы объектов и коллекций раздельной установке свойств и раздельному добавлению новых объектов в коллекцию
AV1561Не допускайте, чтобы метод или конструктор принимал более трех параметров
AV1522 Присваивайте значение каждой переменной в отдельном объявлении
AV1521 Объявляйте и инициализируйте переменные как можно позже
AV1520 Используйте var только тогда, когда тип переменной очевиден
AV1508 Наименование файла с исходным кодом, который содержит частичный тип данных, должно отражать назначение этой части
AV1510 Используйте using вместо указания полной ссылки на тип из другого пространства имен
AV1515 Не используйте «магические» числа
AV1507 Ограничивайте содержимое файла с исходным кодом одним типом данных
AV1506 Называйте файлы с исходным кодом в соответствии с тем типом данных, который он содержит
AV1505 Наименование сборки в её названии должно идти после наименования её пространства имён
AV1500 В методе не должно быть более 7 объявлений
AV1501 Создавайте все члены класса private, а типы internal по умолчанию

РАЗЛИЧНЫЕ РЕКОМЕНДАЦИИ ПО ПРОЕКТИРОВАНИЮ

AV1202 Обеспечьте полное и осмысленное сообщение об исключении
AV1210 Не игнорируйте ошибку путем обработки общих исключений
AV1220 Всегда проверяйте делегат обработчика события на null
AV1230 Использование событий уведомления об изменении свойств
AV1240 Используйте общие ограничения, если возможно
AV1250 Вычисляйте результат LINQ-запроса до того, как вернуть его
AV1235 Не отправляйте null в качестве аргумента при вызове события
AV1225 Для обработки каждого события используйте защищенный виртуальный метод
AV1215 Обрабатывайте исключения в асинхронном коде должным образом
AV1205 Генерируйте настолько специфичное исключение, насколько это возможно
AV1200 Генерируйте исключение вместо возвращения статусного сообщения